python - 列表中的整数

标签 python list set

<分区>

我需要从列表中获取相同的整数:正数和负数,例如,如果列表由 [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/

相关文章:

java - 仅将集合的一部分放入数组中

python setup.py 在 vi​​rtualenv 外安装

r - 合并列表与共同元素

python - 如何在python中构造一组列表项?

c++ - 如何使用存储在 c++ 中的 std vector 中的 std::list 迭代器制作复制安全容器?

ios - 创建使用 XIB 文件的 Storyboard

java - 从集合的 ArrayList 中删除重复项 | ArrayList<Set<String>> tmp

python - django-social-auth 使用 Google OpenID 给出 502 错误,但只有少数用户

python 正则表达式第一个/最短匹配

python - 创建和初始化 python 列表