<分区>
我需要从列表中获取相同的整数:正数和负数,例如,如果列表由 [0,1,-1,3] 组成,它只会返回 1 -1。到目前为止我有。
s = []
for i in a:
if i in s
s.append(i and -i)
print s
<分区>
我需要从列表中获取相同的整数:正数和负数,例如,如果列表由 [0,1,-1,3] 组成,它只会返回 1 -1。到目前为止我有。
s = []
for i in a:
if i in s
s.append(i and -i)
print s
最佳答案
让我们直接将它从英语翻译成 Python。
首先,我们必须得到准确的英文描述:你想要a
中的所有值,其否定也在a
中。
在 Python 中,这是:
[value for value in a if -value in a]
但是,如果您有一百万个值,那么 -value in a
将不得不为每个值平均搜索 50 万个值,这意味着总共有 5000 亿次比较。您的一位同学显然已将其上交,并因在某些示例数据上占用了一分钟而本应花费大约一秒钟的时间而受到指责。
您可以使用set
来解决这个问题。在集合中寻找一个值只需要一次散列查找和一次比较,而不是必须与每个值进行比较。所以:
s = set(a)
[value for value in a if -value in s]
有多种方法可以进一步优化事物。最明显的是,如果您不需要保留重复项或按顺序返回值,您可以只遍历集合而不是原始列表。但还有其他聪明的想法。你可以看到一堆here ,以及一些比较。
关于python - 列表中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305524/