1

txtファイルから取り出した40語のリストを取得しました。重複を見つけて、同じ単語に置き換えましたが、前後に「*」を付けました。コードは次のようになります。

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 最初の重複を無視し、残りを前後に * で強調表示します。

編集:

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

魔法のように機能するようです。追加したいのは、大文字と小文字を区別することだけです。あたかも「ハン」と「ハン」が発生したかのように、それが重複していることに気づきます。

4

3 に答える 3

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
于 2013-06-17T17:44:24.863 に答える
0

a を使用して、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))
于 2013-06-17T17:44:46.620 に答える
0

要素がスライスされたリストに表示される場合は、要素を反復してアスタリスク付きのバージョンに置き換えます。現在のインデックスを追跡するenumerate

lista2 = [s if s not in lista[:i] else '*'+s+'*' for i,s in enumerate(a)]
于 2013-06-17T17:46:10.047 に答える