2

我有这些清单:

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,)

任何人都可以帮助我吗?

4

5 回答 5

7

这是一个单行:

>>> 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)))
于 2012-04-15T21:20:08.767 回答
5
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)
于 2012-04-15T21:18:33.480 回答
4
for a,b in zip(list1,list2):
  x = a/b
  y = 1/b

?? 像这样的东西

于 2012-04-15T21:18:55.327 回答
4

只需在 Python 中使用 zip 函数:

for a, b in zip(list1, list2):
    list3.append(a/b)
    list4.append(1/b)
于 2012-04-15T21:19:33.353 回答
0
list3 = map((lambda x, y: x/y), list1, list2)
list4 = map(lambda x: 1/x), list2)

或者:

list3, list4 = zip(*map((lambda x, y: (x/y, 1/y)), list1, list2)
于 2019-08-11T05:08:02.847 回答