Найти - Пользователи
Полная версия: Помогите написать функцию подсчёта определённых элементов списка
Начало » Python для новичков » Помогите написать функцию подсчёта определённых элементов списка
1
arrghh
Помогите новичку, не кидайтесь тапками за длинное вступление, пожалуйста, я учусь и хочу разобраться. Пробую написать функцию, которая будет показывать количество определённых элементов в списке для всех элементов, но без повторения. То есть, если в списке есть два элемента x и два элемента y — программа по задумке должна писать “элементов x дано: 2”, “элементов y дано: 2” и так далее.

Вот мой код. Если я помещаю финальную команду print в цикл for e…, то, понятное дело, получается результат как на приложенном скриншоте — для каждого индекса выводится результат. Если print поместить в цикл for i…, то почему-то (я не могу понять, почему) выводится лишь количество элементов, соответствующих самому последнему в списке, то есть, “элементов 4 дано: 3”. Ещё не могу понять, откуда в выводимом результате берётся None в обоих случаях.

 def county(*args):
	for i in args:
		for e in i:
			el_x_count = i.count(e)
			print("элементов", str(e), "дано: ", el_x_count)
spis = [1, 2, 3, 4, 4, 5, 5, 4]
print(county(spis))

Буду премного благодарен за помощь с кодом.
py.user.next
Аргумент один подаётся
  
>>> def county(arg):
...     for e in arg:
...         el_x_count = arg.count(e)
...         print("элементов", e, "дано:", el_x_count)
... 
>>> spis = [1, 2, 3, 4, 4, 5, 5, 4]
>>> county(spis)
элементов 1 дано: 1
элементов 2 дано: 1
элементов 3 дано: 1
элементов 4 дано: 3
элементов 4 дано: 3
элементов 5 дано: 2
элементов 5 дано: 2
элементов 4 дано: 3
>>>

Уже обработанные элементы нужно сохранять во множестве
  
>>> def county(arg):
...     seen = set()
...     for e in arg:
...         if e in seen:
...             continue
...         seen.add(e)
...         el_x_count = arg.count(e)
...         print("элементов", e, "дано:", el_x_count)
... 
>>> spis = [1, 2, 3, 4, 4, 5, 5, 4]
>>> county(spis)
элементов 1 дано: 1
элементов 2 дано: 1
элементов 3 дано: 1
элементов 4 дано: 3
элементов 5 дано: 2
>>>

arrghh
Ещё не могу понять, откуда в выводимом результате берётся None в обоих случаях.
Если return у функции нет, то там в конце функции как бы стоит невидимый return None.
  
>>> def f(arg):
...     arg
... 
>>> print(f('abc'))
None
>>> 
>>> 
>>> def f(arg):
...     arg
...     return None
... 
>>> print(f('abc'))
None
>>> 
>>> 
>>> def f(arg):
...     print(arg)
... 
>>> print(f('abc'))
abc
None
>>> 
>>> 
>>> def f(arg):
...     print(arg)
...     return None
... 
>>> print(f('abc'))
abc
None
>>> 
>>> 
>>> def f(arg):
...     return arg
... 
>>> print(f('abc'))
abc
>>> 
>>> 
>>> def f(arg):
...     print(arg)
... 
>>> f('abc')
abc
>>> 
>>> 
>>> def f(arg):
...     return arg
... 
>>> f('abc')
'abc'
>>>
arrghh
Всё понял, огромное спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB