【发布时间】:2014-06-27 23:41:45
【问题描述】:
我是 Python 新手。我用于减少字符串列表的代码需要很长时间才能执行。它的功能是查找:仅列表中那些不与同一列表中的其他字符串部分匹配的字符串。这段代码有更有效的形式吗?
下面的代码似乎比下面的代码更有效:any(item1 for item in my_list1 if item1.startswith(item1) or item1.endswith(item1)) 来自相关问题 (Python list lookup with partial match)。我用错了吗?
现在,我只能在 my_list1 中找到部分匹配项,这些匹配项开始或结束了 my_list1 中的其他条目。我想找到所有部分匹配,甚至是中心匹配。
#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
所需的 my_list2 将是:
['abcdef']
当我换行时
if item2.startswith(item1):
到
if item2 in item1:
我从 my_list2 中的数千个结果(几乎没有冗余)到 my_list2 中的零个结果
【问题讨论】:
-
如果您的列表确实是您显示的整数列表,那么您的代码将根本不起作用;
int对象没有.startswith()方法。 -
(不管怎样,你要查看子字符串是否在字符串中的运算符是
in。) -
不好的例子,谢谢。我总是使用字符串列表,即使在处理整数时也是如此。
-
@mattkaeo 您应该将
if item2.startswith(item1)替换为if item1 in item2,而不是if item2 in item1。 -
@dano 是的!我从 my_list2 中的 3443 个项目使用startswith 到 1439
标签: python string performance python-2.7 search