python比较两个字符串元素,python – 循环比较字符串列表元素和字符串列表子元素的有效方法...

我目前正在努力寻找一种有效的方法来将附加到列表的字符串元素的一部分与另一个字符串元素进行比较.当前的代码计算非常长(1小时,第一个列表中有4,8百万个元素,第二个列表中有5000个元素).

我需要做的是:如果第一个字符串元素的8个第一个字符等于完整的第二个元素,则使用完整的第一个元素更新第三个列表.一旦找到,我们测试第一个列表的另一个元素.

这是代码:

for first_element in first_List :

for second_element in second_List:

if first_element[:8] == second_element :

third_List.append(first_element)

break

我知道这些循环不是处理非常大的列表的最佳方式. if测试的数量真的很大.

我想知道是否有一种有效的方法来做到这一点.

我认为与集合的交集将不起作用,因为我将元素的一部分与完整的元素进行比较,我需要复制第三个列表中的完整第一个元素.

你有什么建议或意见吗?

解决方法:

这有效:

second_set = set(second_list)

third_list = [value for value in first_list if value[:8] in second_set]

例:

>>> first_list = ['abcdfghij', 'xyzxyzxyz', 'fjgjgggjhhh']

>>> second_list = ['abcdfghi', 'xyzxyzxy', 'xxx']

>>> second_set = set(second_list)

>>> third_list = [value for value in first_list if value[:8] in second_set]

>>> third_list

['abcdfghij', 'xyzxyzxyz']

这应该更有效率.

列表second_list到集合的转换是O(n).

first_list上有一个循环是O(n).集合中的查找,即在second_set中的查找是O(1).

标签:python,string,list,intersection

来源: https://codeday.me/bug/20190824/1706707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值