将多个相同的值添加到列表中的最pythonic方法是什么?当然我可以用循环或类似
来做someList += [someValue for i in range(someNumber)]
但可能有更好的方法或功能吗?
答案 0 :(得分:4)
如果someValue
是不可变的,则可以使用乘法:
someList += [someValue] * someNumber
这会创建对{em>相同someNumber
对象的someValue
个引用。这意味着,如果someValue
是可变对象,您将看到所有这些引用中反映的对象的更改。
因此,对于 mutable 类型,通常使用列表推导来确保创建新对象。要扩展列表,而不是+=
,您还可以将list.extend()
与生成器表达式一起使用:
someList.extend(['extra', 'list', 'elements'] for _ in range(someNumber))
演示:
>>> someList = ['foo', 'bar', 'baz']
>>> someList += ['spam'] * 5
>>> someList
['foo', 'bar', 'baz', 'spam', 'spam', 'spam', 'spam', 'spam']
并使用可变对象(在这种情况下为列表):
>>> someList = ['foo', 'bar', 'baz']
>>> someList += [['spam']] * 5
>>> someList
['foo', 'bar', 'baz', ['spam'], ['spam'], ['spam'], ['spam'], ['spam']]
>>> someList[-1].append('ham')
>>> someList
['foo', 'bar', 'baz', ['spam', 'ham'], ['spam', 'ham'], ['spam', 'ham'], ['spam', 'ham'], ['spam', 'ham']]
>>> someList[-1] is someList[-2]
True
答案 1 :(得分:2)
如果somevalue
是不可变的
someList += [somevalue] * somenum
答案 2 :(得分:2)
为什么不使用*
乘法运算符,如下所示:
someList += [someValue] * someNumber
请注意,每次都会引用相同的元素,因此如果使用可变类型,可能会产生不希望的结果。
示例:强>
>>>someList = [5]
>>>someList += [10] * 10
>>>someList
[ 5, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
或者,如果您不希望每次都引用相同的元素(可能是可变类型等),您可以随时使用列表推导来为每个列表项创建新元素: / p>
someList += [10 for i in range(10)]
答案 3 :(得分:1)
您可以使用itertools
中的repeat
函数让读者更清楚地知道您正在做的是在将值添加到列表之前重复一个值:
import itertools as it
someList += it.repeat(someValue, someNumber)
当然,我不认为您的原始代码不可读或开始时只是单声道...