Python 列表理解技巧
Python list comprehension trick
这可能是个愚蠢的问题,但是...
list = []
for i in range(1, 5):
for j in range(i):
list.append(i)
print(list)
list2 = [[i]*i for i in range(1, 5)]
print(list2)
使用以下代码,我的输出类似于
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
我明白为什么第二个看起来像这样,但是有什么技巧可以理解第一个列表吗?
P.S.
Python3
[i for i in range(5) for j in range(i)]
应该可以解决问题。
您可以在列表理解中使用多个 for
。
这是你想要的吗?
>>> list2 = [i for i in range(1, 5) for j in range(i)]
>>> list2
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
诀窍是将类似的 for
循环以相同的顺序放入列表推导中(并且由于您不需要列表的列表,因此不要创建它们)。
虽然我更喜欢双 for
,但您也可以使用 reduce
和 list2
:
list1 = reduce(lambda x, y: x + y, [[i] * i for i in range(1, 5)])
print list1
# [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
我可以从你的代码片段中添加 sum
以获得相同的输出:
>>> sum([[i]*i for i in range(1, 5)], [])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>>
或使用减少:
>>> reduce(lambda x,y: x+y, [[i]*i for i in range(1, 5)])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>>
如果您不喜欢这个解决方案,请告诉我。我会删除它。
使用 itertools,
from itertools import chain, repeat
list2 = list(chain.from_iterable(repeat(i, i) for i in range(1, 5)))
print(list2)
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
[Program finished]
这可能是个愚蠢的问题,但是...
list = []
for i in range(1, 5):
for j in range(i):
list.append(i)
print(list)
list2 = [[i]*i for i in range(1, 5)]
print(list2)
使用以下代码,我的输出类似于
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
我明白为什么第二个看起来像这样,但是有什么技巧可以理解第一个列表吗?
P.S.
Python3
[i for i in range(5) for j in range(i)]
应该可以解决问题。
您可以在列表理解中使用多个 for
。
这是你想要的吗?
>>> list2 = [i for i in range(1, 5) for j in range(i)]
>>> list2
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
诀窍是将类似的 for
循环以相同的顺序放入列表推导中(并且由于您不需要列表的列表,因此不要创建它们)。
虽然我更喜欢双 for
,但您也可以使用 reduce
和 list2
:
list1 = reduce(lambda x, y: x + y, [[i] * i for i in range(1, 5)])
print list1
# [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
我可以从你的代码片段中添加 sum
以获得相同的输出:
>>> sum([[i]*i for i in range(1, 5)], [])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>>
或使用减少:
>>> reduce(lambda x,y: x+y, [[i]*i for i in range(1, 5)])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>>
如果您不喜欢这个解决方案,请告诉我。我会删除它。
使用 itertools,
from itertools import chain, repeat
list2 = list(chain.from_iterable(repeat(i, i) for i in range(1, 5)))
print(list2)
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
[Program finished]