【发布时间】:2012-01-05 07:32:02
【问题描述】:
我有一个字符串数组如下:
[a1,a2,a1,a3,a2]
我想找到类似的字符串并将它们放入一个新的数组中,如下所示:
[a1,a2]
我是 Python 新手。请告诉我如何执行此操作。
谢谢。
【问题讨论】:
我有一个字符串数组如下:
[a1,a2,a1,a3,a2]
我想找到类似的字符串并将它们放入一个新的数组中,如下所示:
[a1,a2]
我是 Python 新手。请告诉我如何执行此操作。
谢谢。
【问题讨论】:
如果用数组表示python中的列表-:
s = ["a1","a2","a1","a3","a2"]
duplicates = [x for x in s if s.count(x) > 1]
myl = list(set(duplicates))
print myl
输出['a1', 'a2']
【讨论】:
使用collections.Counter 的替代解决方案
s = ["a1","a2","a1","a3","a2"]
c=collections.Counter(s)
print dict(c.most_common(len(c)-1)).keys()
['a1', 'a2']
【讨论】:
这是 O(nlog(n)) 方法来查找重复项。初始列表已排序( O(nlog(n)) ),以便在相邻位置重复元素。然后简单的 O(n) 迭代可以找到重复项。
s = ["a1","a2","a1","a3","a2"]
s.sort() # sort changes initial list
new_list = []
prev = (None, False)
for x in s:
if prev == (x, False):
new_list.append(x)
prev = (x, True)
else:
prev = (x, False)
print new_list
【讨论】:
虽然不知道性能如何 - 但它有效
s = ["a1","a2","a1","a3","a2"]
i=0
common=[]
for i in range(0,len(s)):
if s[i] not in common and s[i] in s[i+1:]:
common.append(s[i])
【讨论】: