我有一个逗号分隔的字符串,如何以pythonic方式删除字符串中的重复条目。
例如,字符串"a,a,b"
应更改为"a,b"
。
答案 0 :(得分:8)
元素的顺序是否重要?如果没有,最简单的方法是创建set
:
result = ','.join(set(text.split(',')))
但正如我所说,这不会保留原始字符串的顺序:
>>> text = 'b,a,b'
>>> ','.join(set(text.split(',')))
'a,b'
答案 1 :(得分:6)
如果订单很重要,您可以使用OrderedDict
:
>>> from collections import OrderedDict
>>> s = "a,a,b"
>>> ",".join(OrderedDict.fromkeys(s.split(',')))
'a,b'
请注意,这也会处理彼此不相邻的重复项:
>>> s = "a,b,a,a,a,b"
>>> ",".join(OrderedDict.fromkeys(s.split(',')))
'a,b'
答案 2 :(得分:0)
这应该可以解决问题:
list(set(['a','a','b']))
答案 3 :(得分:0)
你实际上没有详细说明你想要的东西。正如大家所指出的那样,订单有关系吗?是要删除所有重复项还是只删除相同的重复项?
如果顺序无关紧要,所有set
解决方案都可以。如果是,那么这些情况有itertools recipes:
from itertools import ifilterfalse, imap, groupby
from operator import itemgetter
def unique_everseen(iterable, key=None):
"List unique elements, preserving order. Remember all elements ever seen."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
seen = set()
seen_add = seen.add
if key is None:
for element in ifilterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
yield element
def unique_justseen(iterable, key=None):
"List unique elements, preserving order. Remember only the element just seen."
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
return imap(next, imap(itemgetter(1), groupby(iterable, key)))
您可以将其中任何一项应用于'a,a,b'.split(',')
:
In [6]: ','.join(set('a,a,b'.split(',')))
Out[6]: 'a,b'
In [7]: ','.join(unique_justseen('a,a,b'.split(',')))
Out[7]: 'a,b'
In [8]: ','.join(unique_everseen('a,a,b'.split(',')))
Out[8]: 'a,b'
或者,对于他们不同的情况:
In [9]: ','.join(set('a,a,b,a'.split(',')))
Out[9]: 'a,b'
In [10]: ','.join(unique_everseen('a,a,b,a'.split(',')))
Out[10]: 'a,b'
In [11]: ','.join(unique_justseen('a,a,b,a'.split(',')))
Out[11]: 'a,b,a'
答案 4 :(得分:0)
嘿,只需使用以下Java 8语法:
String words = "hello,hii,hii,bye,hii,word,World";
words = Arrays.stream(words.split(",")).distinct().collect(Collectors.joining(","));
输出:
words: hello,hii,bye,word,World