2024-04-19 06:05:23 发布
网友
说我有这个
b = 3 l = [1, 2]
我想修改l,使每个元素出现的次数与b相同,以便:
l = [1, 1, 1, 2, 2, 2]
我用这个:
for x in l: for m in range(b): l.append(x)
但它导致了一个无限循环。 任何帮助都将不胜感激。 我宁愿你们给我主意也不要给我密码。 谢谢。
我的2美分:
实现这一点的另一种方法是利用Python中可以成倍增加列表的事实。
>>> l = [1, 2, 3] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3]
对sorted函数的简单调用允许对其进行排序:
sorted
>>> b = 3 >>> l = [1, 2] >>> sorted(l * b) [1, 1, 1, 2, 2, 2]
您的主要问题是,在遍历列表时对其进行修改是不安全的。你可以通过建立一个新的列表来解决这个问题——各种各样的itertools和comprehension答案显示了一些方法,或者如果你愿意的话,你可以使用你的for循环。
for
既然您需要的是想法而不是代码,我将指出itertools.repeat是另一个有用的工具。很明显,如何使用它来乘以列表中的给定元素,然后需要找出如何将列表中每个元素的迭代器组合成一个列表。为此,itertools.chain非常有用,可以使用*语法来解压repeat迭代器序列或itertools.chain.from_iterable构造函数。
itertools.repeat
itertools.chain
*
repeat
itertools.chain.from_iterable
这基本上与freyrs的答案相同,只是为每个元素创建一个repeat迭代器,而不是为每个元素创建一个列表并对其进行乘法运算。
您可以使用列表理解:
>>> b = 3 >>> x = [1, 2] >>> l = [x for x in l for _ in range(b)] >>> l [1, 1, 1, 2, 2, 2] >>>
现在,要解决您的问题:
您可能需要创建一个新列表,并附加到该列表
>>> l = [1, 2] >>> y = [] >>> b = 3 >>> for x in l: ... for i in range(b): ... y.append(x) ... >>> y [1, 1, 1, 2, 2, 2]
不过,我更喜欢列表理解法。
我的2美分:
实现这一点的另一种方法是利用Python中可以成倍增加列表的事实。
对
sorted
函数的简单调用允许对其进行排序:您的主要问题是,在遍历列表时对其进行修改是不安全的。你可以通过建立一个新的列表来解决这个问题——各种各样的itertools和comprehension答案显示了一些方法,或者如果你愿意的话,你可以使用你的
for
循环。既然您需要的是想法而不是代码,我将指出
itertools.repeat
是另一个有用的工具。很明显,如何使用它来乘以列表中的给定元素,然后需要找出如何将列表中每个元素的迭代器组合成一个列表。为此,itertools.chain
非常有用,可以使用*
语法来解压repeat
迭代器序列或itertools.chain.from_iterable
构造函数。这基本上与freyrs的答案相同,只是为每个元素创建一个
repeat
迭代器,而不是为每个元素创建一个列表并对其进行乘法运算。您可以使用列表理解:
现在,要解决您的问题:
您可能需要创建一个新列表,并附加到该列表
不过,我更喜欢列表理解法。
相关问题 更多 >
编程相关推荐