簡體   English   中英

如何在列表的字符串末尾附加唯一計數?

[英]How to append unique counts to end of strings in a list?

我正在尋找類似於此問題的內容 ,但使用Python。

我有一個重復元素的列表:

["Apple", "Orange", "Apple", "Pear", "Banana", "Apple", "Apple", "Orange"]

我正在尋找一個列表表達式或一種可以給我以下方法的方法:

["Apple 1", "Orange 1", "Apple 2", "Pear 1", "Banana 1", "Apple 3", "Apple 4", "Orange 2"]

顯然,保持秩序非常重要。

選項1
collections.Counter

from collections import Counter

mapping = {k : iter(range(1, v + 1)) for k, v in Counter(lst).items()} 
lst2 = ['{} {}'.format(x, next(mapping[x])) for x in lst]

print(lst2)
['Apple 1', 'Orange 1', 'Apple 2', 'Pear 1', 'Banana 1', 'Apple 3', 'Apple 4', 'Orange 2']

選項2
itertools.count

juan建議使用itertools.count ,它是上述的一種很好的選擇。

from itertools import count

mapping = {k : count(1) for k in set(lst)}   
lst2 = ['{} {}'.format(x, next(mapping[x])) for x in lst]

print(lst2)
['Apple 1', 'Orange 1', 'Apple 2', 'Pear 1', 'Banana 1', 'Apple 3', 'Apple 4', 'Orange 2']

兩者之間的區別在於定義mapping的方式。

直截了當的方式似乎很明顯:

>>> from collections import Counter
>>> counts = Counter()
>>> x = ["Apple", "Orange", "Apple", "Pear", "Banana", "Apple", "Apple", "Orange"]
>>> new_x = []
>>> for item in x:
...     counts[item] += 1
...     new_x.append(f"{item}{counts[item]}")
...
>>> new_x
['Apple1', 'Orange1', 'Apple2', 'Pear1', 'Banana1', 'Apple3', 'Apple4', 'Orange2']
>>>
from collections import Counter

data = ["Apple", "Orange", "Apple", "Pear", "Banana", "Apple", "Apple", "Orange"]
a = Counter(data)

for i in range(len(data) - 1, -1, -1):
    index = str(a[data[i]])
    a[data[i]] -= 1
    data[i] += ' ' + index   

現在data等於['Apple 1', 'Orange 1', 'Apple 2', 'Pear 1', 'Banana 1', 'Apple 3', 'Apple 4', 'Orange 2']

這樣就可以修改給定的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM