我有一张有18000个唯一ID的名单。
ID是字母A, B, C, D
的串联。
我编写了一个代码,将ID按ID[0:-1]
分组,并给出重复ID的索引位置
这样做很好,但是要继续进行很长时间:大约110 secs
对于18 000 ID
。
你有没有办法加快我的代码速度?你知道吗
a = ['1CDABCABDA', '1CDABCABDB', '1CDABCABDD', '1BCABCCCAA', '1DDAABBBBA', '1BCABCCCAD']
startTime = time.time()
b = [i[0:-1] for i in a]
b = list(set(b))
result = range(len(b))
it = 0
for i in result:
result[i] = [b[i], []]
for j in xrange(len(a)):
if b[i] == a[j][0:-1]:
result[i][1].append(j)
endTime = time.time()
print endTime - startTime, 'secs !'
输出:
>>> [['1CDABCABD', [0, 1, 2]], ['1DDAABBBB', [4]], ['1BCABCCCA', [3, 5]]]
不使用其他模块的替代解决方案:
这就是python中的groupby有效地做到的:
输出:
对于这类问题,使用^{} 作为更具python风格的方法:
注意
defaultdict
是一个线性解,比itertools.groupby
和sorted
更有效。你知道吗也可以使用
dict.setdefault
方法:有关更多详细信息,请查看以下基准点,它的~4X速度更快:
结果:
相关问题 更多 >
编程相关推荐