循环在两个列表中

时间:2012-04-15 21:14:54

标签: python

我有这些清单:

list1 = [3, 5, 2, 1, 9]
list2 = [6, 9, 1, 2, 4]
list3 = []
list4 = []

我想传递这些公式:

x = a/b
y = 1/b

其中a是list1中的每个值,b是list2中的每个值,并将计算结果附加到两个空列表中 - list3和list4。

这就是我所拥有的,但它是一场灾难哈哈:(

u = 0
while u<len(list1):
    for a in list1:
        for b in list2:
            x = a/b
            y = 1/b
            u+=1
            list3.append(x,)
            list4.append(y,)

任何人都可以帮我这个吗?

5 个答案:

答案 0 :(得分:5)

这是一个oneliner:

>>> list3,list4 = zip(*[(a/b,1/b) for a,b in zip(list1,list2)])
>>> list3
(0, 0, 2, 0, 2)
>>> list4
(0, 0, 1, 0, 0)

输出为tuples。但它们可以很容易地转换为list

喔。使用generator expression代替list comprehension

,可以提高内存效率
>>> zip(*((a/b,1/b) for a,b in zip(list1,list2)))

答案 1 :(得分:4)

for a, b in zip(list1, list2):
    x = a/b
    y = 1/b
    list3.append(x)
    list4.append(y)

这假设您的意思是想要成对使用列表。如果你意味着你想要列出所有可能的配对,那么:

for a in list1:
    for b in list2:
        x = a/b
        y = 1/b
        list3.append(x)
        list4.append(y)

答案 2 :(得分:4)

for a,b in zip(list1,list2):
  x = a/b
  y = 1/b

??像这样的东西

答案 3 :(得分:4)

只需在Python中使用zip函数:

for a, b in zip(list1, list2):
    list3.append(a/b)
    list4.append(1/b)

答案 4 :(得分:0)

list3 = map((lambda x, y: x/y), list1, list2)
list4 = map(lambda x: 1/x), list2)

OR:

list3, list4 = zip(*map((lambda x, y: (x/y, 1/y)), list1, list2)