我得到了一个40个单词的列表,我从txt文件中取出。我找到了重复项,并用相同的单词替换它们,然后用“*”替换它们。代码如下所示:
def show(self, list1):
a = [x for x in list1 if list1.count(x) > 1]
lista2 = ["*"+s+"*" if s in a else s for s in list1]
print(lista2)
输入:
> ['utanför', 'dörren', 'stod', 'en', 'man', 'och', 'lyssnade', 'intensivt', 'i', 'den', 'mörka', 'korridoren', 'han', 'hade', 'skuggat', 'digby', 'groat', 'hela', 'eftermiddagen', 'och', 'följt', 'efter', 'honom', 'in', 'i', 'huset', 'när', 'han', 'fick', 'hära', 'ljudet', 'av', 'fotsteg', 'från', 'rummet', 'smög', 'han', 'sig', 'in', 'i']
输出:
> ['utanför', 'dörren', 'stod', 'en', 'man', '*och*', 'lyssnade', 'intensivt', '*i*', 'den', 'mörka', 'korridoren', '*han*', 'hade', 'skuggat', 'digby', 'groat', 'hela', 'eftermiddagen', '*och*', 'följt', 'efter', 'honom', '*in*', '*i*', 'huset', 'när', '*han*', 'fick', 'hära', 'ljudet', 'av', 'fotsteg', 'från', 'rummet', 'smög', '*han*', 'sig', '*in*', '*i*']
请注意,重复项的前后有*
。
TL:DR我想要忽略第一个副本,其余的要用* infront和后面突出显示。
编辑:
def show(self, list1): new_list, seen = [], set() for x in list1: if x in seen: new_list.append('*{0}*'.format(x)) else: new_list.append(x) seen.add(x) print new_list
看起来像一个魅力。 我现在要添加的唯一内容是使其区分大小写。如果“Han”和“han”发生了,它注意到它是重复的。
答案 0 :(得分:2)
def show(self, list1):
new_list, seen = [], set()
for x in list1:
if x in seen:
new_list.append('*{0}*'.format(x))
else:
new_list.append(x)
seen.add(x)
print new_list
答案 1 :(得分:0)
使用set
跟踪所显示的项目:
>>> seen = set()
>>> new_lis = []
for x in lis:
if x in seen: #if item is present in the set `seen` then add the `*`'s
new_lis.append('*' + x + '*')
else:
seen.add(x) #item seen for the first time, add it to the set and the list
new_lis.append(x)
使用生成器功能:
def solve(lis):
seen = set()
for item in lis:
if item in seen:
yield '*' + item + '*'
else:
seen.add(item)
yield item
>>> new_lis = list(solve(your_lis))
答案 2 :(得分:0)
如果元素出现在切片列表中,则使用星号版本迭代并替换该元素。使用enumerate
lista2 = [s if s not in lista[:i] else '*'+s+'*' for i,s in enumerate(a)]