删除或更改列表中特定的重复元素(并非所有重复元素)

MatíasGómezSeeber

我正在尝试制作一些可以读取字符元素列表的内容,并告诉您每个元素重复多少次。我的想法是使用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次”,列表将仅更改为[“ 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

输出相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章