我正在尝试制作一些可以读取字符元素列表的内容,并告诉您每个元素重复多少次。我的想法是使用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")
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] 删除。
我来说两句