我对Python还不熟悉。我减少字符串列表的代码需要很长时间才能执行。它的功能是:只查找列表中那些与同一列表中的其他字符串不部分匹配的字符串。这个代码有没有更有效的形式?你知道吗
下面的代码似乎比下面的代码更好:any(item1 for item in my_list1 if item1.startswith(item1) or item1.endswith(item1))
来自一个相关的问题(Python list lookup with partial match)。我用错了吗?你知道吗
现在,我只能在我的\u列表1中找到部分匹配项,这些匹配项以我的\u列表1中其他条目的开头或结尾。我想找到所有的部分匹配,甚至中间匹配。你知道吗
#My_list1 could be:
my_list=['abcd', 'abcde', 'abcdef', 'bcd', 'bcde', 'bcdef']
for item1 in my_list1:
icount=0
for item2 in my_list1:
if item2.startswith(item1):
icount+=1
if icount>1:
break
if icount==1:
my_list2.append(item1)
print item1
我想要的清单2是:
['abcdef']
当我换线的时候
if item2.startswith(item1):
至
if item2 in item1:
我从在我的\u列表2中有数千个结果(几乎没有冗余)变成了在我的\u列表2中没有结果
您可以在搜索列表之前根据条目的长度对其排序。这样,您就不需要在遍历每个条目时搜索整个列表中的部分匹配,因为您知道当前条目之前的任何条目都不会是部分匹配,因为它们太短了。像这样:
输出:
这篇文章可能会让人困惑:
它遍历当前索引(由
s_l[i+1:]
表示)之后的所有索引,并检查val
子字符串是否包含在每个索引的任何字符串中(由val in ent
表示)。如果这些索引中的任何一个为val in ent
测试返回True
,any
调用将返回True
。因此,如果val
不是s_l
中包含的任何字符串的子字符串,则从当前s_l
索引之后开始,将val
添加到out
列表中。你知道吗相关问题 更多 >
编程相关推荐