Python 使用列表理解复制列表项
例如,我想将列表中的项目复制到新列表中Python 使用列表理解复制列表项,python,Python,例如,我想将列表中的项目复制到新列表中 a=[1,2] b=[[i,i] for i in a] 给出了[[1,1],[2,2]],而我想要[1,1,2,2] 我还发现我可以使用: b=[i for i in a for j in a] 但对循环使用两个似乎有些过分。是否可以使用单个for循环执行此操作 您想要的,它接受一个iterable的iterable并返回一个iterable,其中包含子iterable的所有元素(展平一级): 结合生成器表达式,可以得到所需的结果。显然,如果需要列表
a=[1,2]
b=[[i,i] for i in a]
给出了[[1,1],[2,2]]
,而我想要[1,1,2,2]
我还发现我可以使用:
b=[i for i in a for j in a]
但对循环使用两个似乎有些过分。是否可以使用单个for
循环执行此操作 您想要的,它接受一个iterable的iterable并返回一个iterable,其中包含子iterable的所有元素(展平一级):
结合生成器表达式,可以得到所需的结果。显然,如果需要列表,只需在迭代器上调用list()
,但在大多数情况下,这是不需要的(而且效率较低)
正如Ashwini所建议的,如果您希望每个项目len(a)
重复,那么也很简单:
duplicates = len(a)
b = itertools.chain.from_iterable([i] * duplicates for i in a)
请注意,这些解决方案中的任何一个都不会复制i
,它们为您提供了对同一元素的多个引用。大多数情况下,这应该没问题。您需要,它获取一个iterable,并返回一个iterable,其中包含子iterable的所有元素(展平一级):
结合生成器表达式,可以得到所需的结果。显然,如果需要列表,只需在迭代器上调用list()
,但在大多数情况下,这是不需要的(而且效率较低)
正如Ashwini所建议的,如果您希望每个项目len(a)
重复,那么也很简单:
duplicates = len(a)
b = itertools.chain.from_iterable([i] * duplicates for i in a)
请注意,这些解决方案中的任何一个都不会复制i
,它们为您提供了对同一元素的多个引用。大多数情况下,这应该没问题。如果您不介意点餐:
>>> a = [1,2]
>>> a * 2
[1, 2, 1, 2]
如果您不介意点菜:
>>> a = [1,2]
>>> a * 2
[1, 2, 1, 2]
您的两个循环代码实际上并没有实现您想要的功能,因为内部循环是为外部循环的每个步骤计算的。以下是一个简单的解决方案:
b = [j for i in a for j in (i, i)]
您的两个循环代码实际上并没有实现您想要的功能,因为内部循环是为外部循环的每个步骤计算的。以下是一个简单的解决方案:
b = [j for i in a for j in (i, i)]
您可以使用xrange
并使用生成器表达式或列表
b = (x for x in a for _ in xrange(2))
b = [x for x in a for _ in xrange(2)]
您可以使用xrange
并使用生成器表达式或列表
b = (x for x in a for _ in xrange(2))
b = [x for x in a for _ in xrange(2)]
是否要将每个项目重复2次或len(a)
次?请注意,这些不仅仅是循环的,而是循环的。了解它们如何工作的机制是值得的,尤其是因为有许多兄弟结构(生成器表达式、集合理解等)具有不同的行为。@AshwiniChaudhary我想将每个项目重复两次,因此[1,2,3]
将变成[1,1,2,2,3,3]
@HåkonHægland那么你的基于列表理解的代码实际上是错误的。@AshwiniChaudhary谢谢,我现在意识到了。你想把每个项目重复2次还是len(a)
次?请注意,这些不仅仅是循环的,它们是。了解它们如何工作的机制是值得的,尤其是因为有许多兄弟结构(生成器表达式、集合理解等)具有不同的行为。@AshwiniChaudhary我想将每个项目重复两次,因此[1,2,3]
将变成[1,1,2,2,3,3]
@HåkonHægland那么你的列表理解代码实际上是错误的。@AshwiniChaudhary谢谢,我现在意识到了。答案怎么了?不要像OP所要求的那样重复列表中的项目?这绝对不值得投反对票-这可能不适合OP的情况,但这是一个潜在的解决方案。OP从来没有说过一定要下订单,而你的回答指出,订单不会像给定的那样。这是一个很好的答案,如果有人不在乎的话——如果有人问这个问题,很可能就是这样。这个答案有什么问题?不要像OP所要求的那样重复列表中的项目?这绝对不值得投反对票-这可能不适合OP的情况,但这是一个潜在的解决方案。OP从来没有说过一定要下订单,而你的回答指出,订单不会像给定的那样。这是一个很好的答案,如果有人不在乎的话——如果有人问这个问题,很可能就是这样。