两个列表的嵌套列表理解

2024-09-26 22:50:13 发布

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

我理解简单的列表理解是如何工作的,例如:

[x*2 for x in range(5)] # returns [0,2,4,6,8]

我还了解嵌套列表压缩的工作原理:

w_list = ["i_have_a_doubt", "with_the","nested_lists_comprehensions"]

# returns the list of strings without underscore and capitalized
print [replaced.title() for replaced in [el.replace("_"," ")for el in w_list]]

所以,当我试着这么做的时候

l1 = [100,200,300]
l2 = [0,1,2]
[x + y for x in l2 for y in l1 ]

我预料到:

[101,202,303]

但我明白了:

[100,200,300,101,201,301,102,202,302]

所以我有更好的方法来解决这个问题

[x + y for x,y in zip(l1,l2)]

但我不明白第一段代码返回了9个元素


Tags: theinl1列表forhavewithrange
3条回答

上面的答案对你的问题来说已经足够了,但是我想给你提供一个列表理解解决方案供你参考(因为那是你的初始代码,你想理解什么)。

假设两个列表的长度相同,可以执行以下操作:

[l1[i] + l2[i] for i in range(0, len(l1))]

列表理解等同于for循环。因此,[x + y for x in l2 for y in l1 ]将变成:

new_list = []
for x in l2:
    for y in l1:
        new_list.append(x + y)

zip返回的元组包含每个列表中的一个元素。因此[x + y for x,y in zip(l1,l2)]相当于:

new_list = []
assert len(l1) == len(l2)
for index in xrange(len(l1)):
    new_list.append(l1[index] + l2[index])

它有9个数字是因为python处理

[x + y for x in l2 for y in l1 ]

类似于

for x in l2:
    for y in l1:
       x + y

也就是说,这是一个嵌套循环

相关问题 更多 >

    热门问题