如果要创建1d数组,可以将其实现为List,或者使用标准库中的"array"模块.我一直使用列表进行1d数组.
我想要使用阵列模块的原因或情况是什么?
它是用于性能和内存优化,还是我错过了一些明显的东西?
我见过有人说setpython 中的对象有O(1)成员资格检查.它们如何在内部实施以实现这一目标?它使用什么样的数据结构?该实施还有哪些其他含义?
这里的每个答案都很有启发性,但我只能接受一个,所以我会用最接近我原来问题的答案.谢谢你的信息!
我有一个任务是根据具体情况创建日期集,例如"大于2"将被传递,我需要在本月创建一组日期> 2的所有日期.我也是一个开始时间和停止时间,例如上午10点至下午6点,在这种情况下,我将创建一组所有日期> 2,并在每天有时间从上午10点开始,结束和下午6点,下面是一个例子:
greater > 2 less < 9
start time :10am
stop time :6 pm
month:july
date1: 2016-07-03 10:00, 2016-07-03 16:00
date2: 2016-07-04 10:00, 2016-07-04 16:00
date3: 2016-07-05 10:00, 2016-07-05 16:00
.
.
.
date6: 2016-07-8 10:00, 2016-07-8 16:00
Run Code Online (Sandbox Code Playgroud)
我决定将这些日期存储到如下字典中:
dictD = {'dates_between_2_9':[[2016-07-03 10:00, 2016-07-03 16:00], [2016-07-04 10:00, 2016-07-04 16:00], ....., [2016-07-08 10:00, 2016-07-08 16:00]]}
Run Code Online (Sandbox Code Playgroud)
我使用了dict,因为我将需要多个条件来为它们创建日期集,所以除了dates_between_2_5之外还会有另一个键.
另一方面,我根据条件得到另一个请求,以创建具有开始时间的日期,如下所示:
greater > 1 less than 12
start time : 2pm
date1: 2016-07-02 14:00
date2: 2016-07-03 14:00
date3: 2016-07-04 14:00
.
.
. …Run Code Online (Sandbox Code Playgroud) 有人告诉我,在成员资格测试方面,Python 集合比列表更快。
尽管如此,timeit表明对于大量值列表实际上更快。
对于具有更多重复的较小集合,差异更小甚至相反,但是集合仍然没有显着优势(我猜性能问题对于非常大的数据集更为重要,不是吗?)
如何解释这些数据?
>>> import timeit
>>> # Few repetitions on a bigger set:
>>> timeit.timeit('10000 in set(range(10000000))', number=10)
9.265543753999737
>>> timeit.timeit('10000 in list(range(10000000))', number=10)
4.788996731000225
>>> # More repetitions on a smaller set:
>>> timeit.timeit('10000 in set(range(10000))', number=100000)
32.068307194000226
>>> timeit.timeit('10000 in list(range(10000))', number=100000)
32.45919990500079
Run Code Online (Sandbox Code Playgroud) 我正在研究在Python中对大量字符串进行重复数据删除的问题,并使用sets.Set()来解决这个问题。输入是文本文件中的一组字符串,输出是删除了重复项的同一组字符串。
该脚本需要能够在主内存有限(大约 2GB)的机器上运行,问题是集合的大小变得太大,我的输入是一个 800mb 的文本文件。
我的部分代码:
for String in InputFile:
StringSet.add(String)
return StringSet
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来解决这个问题?我考虑过布隆过滤器和 trie,但我更喜欢 Set() 的 O(1) 效率。
编辑:我已经从sets.Set()切换到set(),后者应该具有更高的内存效率,但仍然不够高效。
我有一个单词列表.它非常大(len(列表)~70,000).我目前正在使用此代码:
replacement = "bla"
for word in data:
if (word in unique_words):
word = replacement
Run Code Online (Sandbox Code Playgroud)
此代码需要一段时间才能执行操作.有更快的方法吗?
python ×6
arrays ×1
cpython ×1
datetime ×1
dictionary ×1
list ×1
memory ×1
performance ×1
set ×1