尝试获取列表中出现数字的次数,然后将其打印出来。扭曲是正确的值,取决于数量是出现一次还是多次出现。这就是我所拥有的,我相信它很接近。但我陷入了循环: 输入数字:2 3 3 3 3 4 2发生1次。 3发生4次。 3发生4次。 3发生4次。 3发生4次。 4发生1次。 看看这三个人如何仍然循环。答案不包括在内。任何帮助将不胜感激。
s = input("Enter the numbers: ")
items = s.split() # Extracts items from the string
scores = [ eval(x) for x in items ] # Convert items to numbers
for j in scores:
z = scores.count(j)
if z > 1:
print( j, "occurs ", z, " times.")
else:
print( j, "occurs ", z, " time.")
答案 0 :(得分:3)
所以实际上这很简单,它被称为collections.Counter
。尽管如此,我还是要经历这一切,因为你做的一件事是可怕的。
scores = [eval(x) for x in items]
这是我生命中见过的最可怕的代码。 eval
将参数作为有效的python代码运行,这意味着如果输入一个数字,它将把它变成一个数字,但如果你输入map(os.remove,glob.glob("C:/windows/system32"))
,那么你的计算机就是吐司。相反,做:
s = input("Enter the numbers: ")
items = list()
for entry in s.split():
try: entry = int(entry)
except ValueError: continue
else: items.append(entry)
这将跳过所有AREN&#T; T编号的项目。您可能希望之后测试items
以确保它不是空的,可能类似于if not items: return
之后collections.Counter
是完美的。
from collections import Counter
count_scores = Counter(items):
outputstring = "{} occurs {} time"
for key,value in count_scores.items():
print(outputstring.format(key,value),end='')
if value > 1: print('s')
else: print()
那就是说,既然我把整件事打印出来了 - 你真的需要将它们变成整数吗?它们似乎与字符串的功能相同,如果你以后需要使用它们,那么只需将它们转换为它们!
答案 1 :(得分:0)
你不需要在这里使用itertools
。
items = s.split() # Extracts items from the string
for elem in items:
print("{0} occurs {1} times".format(elem, items.count(elem)))
并获得您想要的结果。
python中的 list
个对象已经有count
方法。
编辑:如果您正在处理大量数据,可以稍微优化一下代码:
items = s.split() # Extracts items from the string
unique = set(items) # Remove repeated.
score = {}
for elem in unique:
coll.update({elem: items.count(elem)})
for elem in items:
print("{0} occurs {1} times".format(elem, score[elem]))
答案 2 :(得分:0)
你非常接近。
不需要eval
,事实上,不需要将字符串转换为整数。
试试这个:
s = input("Enter the numbers: ")
items = s.split() # Extracts items from the string
seen=set()
for j in items:
if j in seen:
continue
seen.add(j)
z = items.count(j)
if z > 1:
print( j, "occurs ", z, " times.")
else:
print( j, "occurs ", z, " time.")
我使用set来查找唯一元素。
如果你运行:
Enter the numbers: 2 3 3 33 4
2 occurs 1 time.
3 occurs 2 times.
33 occurs 1 time.
4 occurs 1 time.
如果你没有使用套装,它会这样做:
s = input("Enter the numbers: ")
items = s.split() # Extracts items from the string
for j in items:
z = items.count(j)
if z > 1:
print( j, "occurs ", z, " times.")
else:
print( j, "occurs ", z, " time.")
运行:
Enter the numbers: 2 3 3 3 3 4
2 occurs 1 time.
3 occurs 4 times.
3 occurs 4 times.
3 occurs 4 times.
3 occurs 4 times.
4 occurs 1 time.
答案 3 :(得分:0)
试试如下:
def count_items(str):
str = str.split()
uniq_str = set(str)
for i in uniq_str:
print(i, 'ocurs', str.count(i), 'times')
count_items( input("Enter the numbers: ") )
输出:
Enter the numbers: 2 3 3 3 3 4
2 ocurs 1 times
3 ocurs 4 times
4 ocurs 1 times