gpt4 book ai didi

python - 在 python 列表理解中解包元组(不能使用 *-operator)

转载 作者:太空狗 更新时间:2023-10-29 18:02:10 25 4
gpt4 key购买 nike

我正在尝试基于另一个列表创建一个列表,其中相同的值连续重复 3 次。

目前,我正在使用:

>>> my_list = [ 1, 2 ]
>>> three_times = []
>>> for i in range( len( my_list ) ):
... for j in range( 3 ):
... three_times.append( my_list[ i ] )
...
>>> print three_times
[1, 1, 1, 2, 2, 2]

但我想用更 Pythonic 的方式来做,例如:

>>> my_list = [ 1, 2 ]
>>> three_times = []
>>> three_times = [ (value,) * 3 for value in my_list ]
>>> print(three_times)
[(1, 1, 1), (2, 2, 2)]

但是,我找不到解压元组的方法。

three_times = [ *( (value,) * 3 ) for value in my_list ] 这样的东西对于解包元组来说是完美的,但这不是正确的语法。

最佳答案

您不能在列表理解中使用 * 可迭代解包,该语法仅在调用中可用,在 Python 3 中使用赋值时可用。

如果你想使用列表理解,只需将你的 for 循环串联起来;您确实希望直接访问 my_list 中的值而不是生成索引:

[v for v in my_list for _ in range(3)]

还有其他几个选项:

  • 使用itertools.repeat()重复这些值,然后 itertools.chain.from_iterable()将这些迭代器连接在一起:chain.from_iterable(repeat(v, 3) for v in my_list)。这会产生一个迭代器,您可以在其上使用 list() 再次获取列表。
  • 使用 chain.from_iterable(zip(*([my_list] * 3))) 在重复值上创建迭代器(重复列表为 transposed into repeated columns )。当然,这可读性差很多,但我们也可以通过在这里使用 repeat() 让它变得不那么糟糕:chain.from_iterable(zip(*repeat(my_list, 3)) )。同样,使用 list() 产生与列表理解相同的输出。

关于python - 在 python 列表理解中解包元组(不能使用 *-operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com