如何在一行中一次将值附加到不同的列表?
How do I append values to different lists at one time, in one line?
我是 python 的初学者,但我在互联网上找不到任何可以帮助我解决这个问题的东西:
我想一次将不同的值附加到 2 个不同的列表(实际问题比这更复杂,但我只需要知道正确的语法,所以我正在简化它)
test1= []
test2= []
[test1.append(1) and test2.append(2) for i in range (10)]
这不会附加到两个列表中,我该如何实现?
如果你的具体例子是你想要的,使用参数解包一次分配多个值:
test1, test2 = [1] * 10, [2] * 10
您还可以使用 zip(*x)
习惯用法来转置 2 列列表:
test1, test2, map(list, zip(*[[1, 2]] * 10))
如果您可以使用元组而不是列表,则可以省略 map(list, ...)
包装器。
据我所知,理解 side-effects 的最好方法是使用大小为零的 collections.deque
,因此它运行迭代器但不存储任何结果:
from collections import deque
test1, test2 = [], []
deque(((test1.append(1), test2.append(2)) for _ in range(10)), maxlen=0)
生成器每次都创建元组 (None, None)
(自 list.append
returns None
),deque
立即丢弃。
首先,我不明白为什么你需要在一行中使用它,似乎没有充分的理由,无论如何我想你可以这样做:
test1, test2 = [], []
for _ in range(10): test1.append(1); test2.append(2)
我是 python 的初学者,但我在互联网上找不到任何可以帮助我解决这个问题的东西:
我想一次将不同的值附加到 2 个不同的列表(实际问题比这更复杂,但我只需要知道正确的语法,所以我正在简化它)
test1= []
test2= []
[test1.append(1) and test2.append(2) for i in range (10)]
这不会附加到两个列表中,我该如何实现?
如果你的具体例子是你想要的,使用参数解包一次分配多个值:
test1, test2 = [1] * 10, [2] * 10
您还可以使用 zip(*x)
习惯用法来转置 2 列列表:
test1, test2, map(list, zip(*[[1, 2]] * 10))
如果您可以使用元组而不是列表,则可以省略 map(list, ...)
包装器。
据我所知,理解 side-effects 的最好方法是使用大小为零的 collections.deque
,因此它运行迭代器但不存储任何结果:
from collections import deque
test1, test2 = [], []
deque(((test1.append(1), test2.append(2)) for _ in range(10)), maxlen=0)
生成器每次都创建元组 (None, None)
(自 list.append
returns None
),deque
立即丢弃。
首先,我不明白为什么你需要在一行中使用它,似乎没有充分的理由,无论如何我想你可以这样做:
test1, test2 = [], []
for _ in range(10): test1.append(1); test2.append(2)