簡體   English   中英

刪除或更改列表的特定重復元素(並非所有重復元素)

[英]Remove or change SPECIFIC repeated elements of a list (not all repeated elements)

我正在嘗試制作一些可以通讀字符元素列表並准確告訴您每個元素重復多少次的東西。 我的想法是使用 for 循環和打印語句來瀏覽列表,這些語句告訴我我想要的信息。

這是我的第一個想法:

list = ["code", "this", "code"]

for i in range(len(list)):
    list.count(list[i])
    print("{} is repeated ".format(list[i]) + str(list.count(list[i])) + " times")

當我運行此代碼時,它打印出:

代碼重復2次

這是重復1次

代碼重復2次

現在,實現我的目標的下一步是停止“代碼重復 2 次”打印兩次。 這是我的麻煩開始。 我已經搜索了從列表中刪除特定重復項的方法,但我發現的只是刪除所有重復項的方法(我不想要這樣,因為這會使代碼在經過列表的第一個元素后變得無用)。 因此,我的問題如下:

一旦打印重復語句,是否可以從列表中刪除特定的重復元素? 這意味着,一旦它打印“代碼重復 2 次”,列表就會更改為僅 ["this"]。

是否可以更改特定重復元素的“值”? 這意味着,一旦它打印“代碼重復 2 次”,列表將更改(例如)為 [0, "this", 0] 以便我可以使用 if 語句在元素為 = 時不打印任何內容= 0。

說清楚,我只想知道:

- 如果可能的話:我怎么能改變我的編碼來實現這種情況。

-如果這是不可能的:我可以做的其他事情來實現我的目標。

使用set

lst = ["code", "this", "code"]
for elem in sorted(set(lst), key = lambda x:lst.index(x)):
    print(f"{elem} is repeated {lst.count(elem)} times")

或者, dict.fromkeys

for elem in dict.fromkeys(lst):
    print(f"{elem} is repeated {lst.count(elem)} times")

輸出:

code is repeated 2 times
this is repeated 1 times

您還可以查看collections.Counter()

from collections import Counter
frequency = Counter(lst)
for word, freq in frequency.items():
    print(f"{word} is repeated {freq} times")

相同的輸出。

你所說的在某種意義上也是可能的,但它看起來不像 Pythonic,我也覺得沒有必要,但是這里是代碼。

注意:在迭代列表時修改列表是一個壞主意。

lst = ['code', 'this', 'code']
i = 0
while any(lst):
    if lst[i] == None:
        i += 1
        continue
    print(f"{lst[i]} is repeated {lst.count(lst[i])} times")
    lst = [None if j == lst[i] else j for j in lst]
    i += 1

輸出相同。

暫無
暫無

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

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