gpt4 book ai didi

python - 我怎样才能加快 python 中的迭代?

转载 作者:行者123 更新时间:2023-11-28 21:25:25 25 4
gpt4 key购买 nike

我想知道你是否可以帮助我加速我的 python 脚本。

我有两个列表:

a=['a','b','c','d','e','f','g','h','i','j']

b=['b','f','g','j']

我想创建一个列表,它将包含 b 的元素,但长度为 a,不在 b 中的元素被其他内容替换,比方说 '-999'。此外,我不想使用实际元素 (a、b、c...),而是想将其替换为 b 中的元素索引。所以它看起来像这样:

c=['-999',0,'-999','-999','-999', 1, 2,'-999','-999',3] 

我现在的代码是:

c=[]

counter=0

for each in a:
if each in b:
c.append(counter)
counter+=1
else:
c.append('-999')

它工作正常,但是,在现实生活中我的列表 a 有 600 000 个元素长,实际上我需要迭代 7 个 b 列表,所有元素也在 3k 到 250k 之间。

关于如何加快速度的任何想法?

最佳答案

如果 b 中的元素是唯一的,那么你可以试试这个:

In [76]: a=['a','b','c','d','e','f','g','h','i','j']

In [77]: b=['b','f','g','j']

In [78]: dic={x:i for i,x in enumerate(b)}

In [79]: dic
Out[79]: {'b': 0, 'f': 1, 'g': 2, 'j': 3}

In [81]: [dic.get(x,'-999') for x in a]
Out[81]: ['-999', 0, '-999', '-999', '-999', 1, 2, '-999', '-999', 3]

对于重复项你可以使用defaultdict(list):

In [102]: a=['a','b','c','d','e','f','g','b','h','i','f','j']

In [103]: b=['b','f','g','j','b','f']

In [104]: dic=defaultdict(list)

In [105]: for i,x in enumerate(b):
dic[x].append(i)
.....:

#now convert every value(i.e list) present in dic to an iterator.

In [106]: dic={x:iter(y) for x,y in dic.items()}

In [107]: [next(dic[x]) if x in dic else '-999' for x in a] #call next() if the key
#is present else use '-999'
Out[107]: ['-999', 0, '-999', '-999', '-999', 1, 2, 4, '-999', '-999', 5, 3]

关于python - 我怎样才能加快 python 中的迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com