我正在制作一个计算数字的计算器。目前,对于正数12
,列表如下所示:
[1,12,2,6,3,4,4,3,6,2,12,1]
我想更改列表,所以它看起来像这样:
[-1,-12,-2,-6,-3,-4,-4,-3,-6,-2,-12,-1]
。
我怎么能做到这一点?
答案 0 :(得分:1)
制作带有负值的复制列表,您可以使用列表理解:
factors = [1,2,3,4,6,12]
negatives = [-item for item in factors]
要将其添加到原始列表,请使用+=
表示法:
factors += [-item for item in factors]
要使其他项目为负,您可以使用基本循环:
edited = []
for i in range(len(factors)):
if i%2:#for odd indices
edited.append(factors[i])
else:
edited.append(-factors[i])
这也可以用列表理解来压缩:
edited = [factors[i] if i%2 else -factors[i] for i in range(len(factors))]
答案 1 :(得分:0)
l = [1,12,2,6,3,4,4,3,6,2,12,1]
for x in l[:]: l.append(-x)
答案 2 :(得分:-1)
假设a
是原始列表:
from itertools import chain, imap
from operator import neg
chain(a, imap(neg, a))
chain
以懒惰的方式创建一个包含两个(或多个)链接在一起的列表(一个接一个)。 imap
是map
的懒惰版本。结果是一个生成器,它返回原始列表的元素,后跟否定列表的元素。
在处理大量数据时,惰性方法非常重要,例如: 2GB列表。接受的解决方案将创建第二个列表,其中包含负片,然后在连接两个列表时创建两倍大小的第三个列表。如果不需要遍历整个列表,这就变得更加明显。
发电机很棒。