Python列出了如何合并两个或多个理解?

2024-05-19 08:59:42 发布

您现在位置:Python中文网/ 问答频道 /正文

FirstList = [10, 20, 23, 11, 17]
SecondList = [13, 43, 24, 36, 12]

thirdlist = [num for num in FirstList if num%2==1]
thirdlist.extend([num for num in SecondList if num%2==0])
print(thirdlist)

因此,我的问题是如何擦除thirdlist.extend()并在一行中编译?我的方法是

thirdlist=[num for num in FirstList if num%2==1 , num1 for num1 in Second ...] 

上述示例的所需输出:

[23, 11, 17, 24, 36, 12]'

Tags: 方法in示例forifnumprintsecond
3条回答

从某种意义上说,列表理解是生成器表达式的语法包装。在本例中,我将显式使用生成器表达式,并将它们与itertools.chain链接在一起。这种方法的优点是创建一个列表对象,而不是两个用于创建第三个最终对象的临时对象

from itertools import chain


FirstList = [10, 20, 23, 11, 17]
SecondList = [13, 43, 24, 36, 12]

thirdList = list(chain((num for num in FirstList if num % 2 == 1),
                       (num for num in SecondList if num % 2 == 0)))
print(thirdlist)

为了可读性,您可能还希望使用filter而不是生成器表达式

thirdList = list(chain(filter(lambda x: x%2 == 1, FirstList),
                       filter(lambda x: x%2 == 0, SecondList))

def even(x):
    return x % 2 == 0

def odd(x):
    return x % 2 == 1

thirdList = list(chain(filter(even, FirstList), filter(odd, SecondList)))

您可以使用itertools.chain而不是+

>>> from itertools import chain

>>> list(chain([num for num in FirstList if num%2==1], [num for num in SecondList if num%2==0]))
[23, 11, 17, 24, 36, 12]

一种方法是在一行中同时使用+list comprehension

FirstList = [10, 20, 23, 11, 17]
SecondList = [13, 43, 24, 36, 12]
thirdlist = [num for num in FirstList if num%2==1] + [num for num in SecondList if num%2==0]
print(thirdlist)

相关问题 更多 >

    热门问题