Python list comprehension - simple

后端 未结 3 1430
春和景丽
春和景丽 2020-12-10 06:53

I have a list and I want to use a certain function only on those entries of it that fulfills a certain condition - leaving the other entries unmodified.

Example: Say

相关标签:
3条回答
  • 2020-12-10 07:31
    a_list = [1, 2, 3, 4, 5]
    
    print [elem*2 if elem%2==0 else elem  for elem in a_list ]  
    

    or, if you have a very long list that you want to modify in place:

    a_list = [1, 2, 3, 4, 5]
    
    for i,elem in enumerate(a_list):
        if elem%2==0:
            a_list[i] = elem*2
    

    so, only the even elements are modified

    0 讨论(0)
  • 2020-12-10 07:38

    You could use lambda:

    >>> a_list = [1, 2, 3, 4, 5]
    >>> f = lambda x: x%2 and x or x*2
    >>> a_list = [f(i) for i in a_list]
    >>> a_list
    [1, 4, 3, 8, 5]
    

    Edit - Thinking about agf's remark I made a 2nd version of my code:

    >>> a_list = [1, 2, 3, 4, 5]
    >>> f = lambda x: x if x%2 else x*2
    >>> a_list = [f(i) for i in a_list]
    >>> a_list
    [1, 4, 3, 8, 5]
    
    0 讨论(0)
  • 2020-12-10 07:47

    Use a conditional expression:

    [x * 2 if x % 2 == 0 else x
     for x in a_list]
    

    (Math geek's note: you can also solve this particular case with

    [x * (2 - x % 2) for x in a_list]
    

    but I'd prefer the first option anyway ;)

    0 讨论(0)
提交回复
热议问题