Найти - Пользователи
Полная версия: Подсчет элементов списка по условию
Начало » Python для новичков » Подсчет элементов списка по условию
1 2
john123
С itemgetter красивее выглядит
4kpt_II
john123
Так Вам указали, что это мелочь и решается одной строкой
А вот код колоссально отличается…

Budulianin
john123
С itemgetter красивее выглядит
+ он быстрее.

john123
Budulianin
+ он быстрее.
itemgetter или сам код?
Если код, то там у меня enumerate для того, чтобы возвращать строку целиком, независимо от количества столбцов (на случай если вдруг их будет больше). Конечно было бы здорово убрать этот enumerate, но к сожалению пока не придумал как

4kpt_II
А вот код колоссально отличается…
Этот код можно разложить на отдельные функции, устранив lambda и получится весьма читаемо.
Budulianin
john123
itemgetter или сам код?
itemgetter

john123
Этот код можно разложить на отдельные функции, устранив lambda и получится весьма читаемо.

Этот код, просто развлечение.
Писать надо что-то типа варианта Shaman
py.user.next
Код Shaman'а с возвращением списка (упорядоченного).
>>> data = [
...     ["name 1", 1],
...     ["name 1", 4],
...     ["name 1", 2],
...     ["name 2", 10],
...     ["name 3", 1],
...     ["name 3", 3],
...     ["name 3", 1],
...     ["name 4", 7],
...     ["name 4", 1],
...     ["name 4", 2],
... ]
>>> 
>>> r = {}
>>> o = []
>>> for n, v in data:
...     r[n] = r.get(n, 0) + v
...     if not o or o[-1] != n:
...         o.append(n)
... 
>>> out = [(i, r[i]) for i in o]
>>> 
>>> print(out)
[('name 1', 7), ('name 2', 10), ('name 3', 5), ('name 4', 10)]
>>>


john123
А во-вторых, что если в строке будет больше двух колонок?
Shaman
Это будет совсем другая история.

Не очень сильно будет код отличаться.
>>> def f(seq):
...     return seq
... 
>>> lst = [['a', 1, 2], ['b', 3, 4]]
>>> 
>>> for i, *t in lst:
...     print(i, f(t))
... 
a [1, 2]
b [3, 4]
>>>
Shaman
Я не уверен в спископотребностях ТС-а, а словарь всегда можно проитерировать.
py.user.next
Shaman
Я не уверен в спископотребностях ТС-а
В первом сообщении написано.

Shaman
а словарь всегда можно проитерировать
Словарь не упорядочен.
>>> {'name1': 1, 'name10': 1, 'name2': 2, 'name20': 2}
{'name10': 1, 'name20': 2, 'name2': 2, 'name1': 1}
>>>
Shaman
py.user.next
Словарь не упорядочен.
Это не всегда нужно.
py.user.next
У него они упорядоченные - что входной, что выходной.
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