#python #python-3.x #list #arraylist
#python #python-3.x #Список #arraylist
Вопрос:
у меня есть list
имя info
, которое содержит несколько списков
структура info
является : info=[[time, city, time, number]]
вот пример info
:
info = [
[0, 'alger', 'en stationnement', '1132'],
[1620, 'Place du 1er Mai', '0:27:00', '1002'],
[1800, 'Vieux Kouba', '0:30:00', '1134'],
[3420, 'garidi', '0:57:00', '1004'],
[3600, 'Vieux Kouba', '1:00:00', '1136'],
[5220, 'Place du 1er Mai', '1:27:00', '1006'],
[6000, 'alger', '1:40:00', '1132'],
[7620, 'Place du 1er Mai', '2:07:00', '1002'],
[7800, 'Vieux Kouba', '2:10:00', '1134'],
[9420, 'Hamma', '2:37:00', '1004'],
[9600, 'Vieux Kouba', '2:40:00', '1136'],
[11220, 'Hamma', '3:07:00', '1006'],
[12000, 'alger', '3:20:00', '1132'],
[13800, 'Vieux Kouba', '3:50:00', '1134'],
]
я хочу, чтобы список не содержал более 2 элементов каждого города.
как и для city
alger, есть 3 элемента, список filtred должен содержать только первые 2 элемента
Комментарии:
1. Что вы пробовали до сих пор?
Ответ №1:
Это один из подходов, используемых collections.defaultdict
для ведения подсчета
Пример:
from collections import defaultdict
c = defaultdict(int)
result = []
for i in info:
if c[i[1]] == 2:
continue
c[i[1]] = 1
result.append(i)
print(result)
Вывод:
[[0, 'alger', 'en stationnement', '1132'],
[1620, 'Place du 1er Mai', '0:27:00', '1002'],
[1800, 'Vieux Kouba', '0:30:00', '1134'],
[3420, 'garidi', '0:57:00', '1004'],
[3600, 'Vieux Kouba', '1:00:00', '1136'],
[5220, 'Place du 1er Mai', '1:27:00', '1006'],
[6000, 'alger', '1:40:00', '1132'],
[9420, 'Hamma', '2:37:00', '1004'],
[11220, 'Hamma', '3:07:00', '1006']]
Ответ №2:
info = [
[0, 'alger', 'en stationnement', '1132'],
[1620, 'Place du 1er Mai', '0:27:00', '1002'],
[1800, 'Vieux Kouba', '0:30:00', '1134'],
[3420, 'garidi', '0:57:00', '1004'],
[3600, 'Vieux Kouba', '1:00:00', '1136'],
[5220, 'Place du 1er Mai', '1:27:00', '1006'],
[6000, 'alger', '1:40:00', '1132'],
[7620, 'Place du 1er Mai', '2:07:00', '1002'],
[7800, 'Vieux Kouba', '2:10:00', '1134'],
[9420, 'Hamma', '2:37:00', '1004'],
[9600, 'Vieux Kouba', '2:40:00', '1136'],
[11220, 'Hamma', '3:07:00', '1006'],
[12000, 'alger', '3:20:00', '1132'],
[13800, 'Vieux Kouba', '3:50:00', '1134'],
]
tmp = {}
for item in info:
tmp.setdefault(item[1], []).append(item)
out = []
for item in tmp.values():
out.extend(item[:2])
from pprint import pprint
pprint(out)
С принтами:
[[0, 'alger', 'en stationnement', '1132'],
[6000, 'alger', '1:40:00', '1132'],
[1620, 'Place du 1er Mai', '0:27:00', '1002'],
[5220, 'Place du 1er Mai', '1:27:00', '1006'],
[1800, 'Vieux Kouba', '0:30:00', '1134'],
[3600, 'Vieux Kouba', '1:00:00', '1136'],
[3420, 'garidi', '0:57:00', '1004'],
[9420, 'Hamma', '2:37:00', '1004'],
[11220, 'Hamma', '3:07:00', '1006']]
Ответ №3:
ниже
from collections import defaultdict
info = [
[0, 'alger', 'en stationnement', '1132'],
[1620, 'Place du 1er Mai', '0:27:00', '1002'],
[1800, 'Vieux Kouba', '0:30:00', '1134'],
[3420, 'garidi', '0:57:00', '1004'],
[3600, 'Vieux Kouba', '1:00:00', '1136'],
[5220, 'Place du 1er Mai', '1:27:00', '1006'],
[6000, 'alger', '1:40:00', '1132'],
[7620, 'Place du 1er Mai', '2:07:00', '1002'],
[7800, 'Vieux Kouba', '2:10:00', '1134'],
[9420, 'Hamma', '2:37:00', '1004'],
[9600, 'Vieux Kouba', '2:40:00', '1136'],
[11220, 'Hamma', '3:07:00', '1006'],
[12000, 'alger', '3:20:00', '1132'],
[13800, 'Vieux Kouba', '3:50:00', '1134'],
]
d = defaultdict(lambda :0)
new_info = []
for item in info:
if d[item[1]] >= 2:
continue
else:
d[item[1]] = 1
new_info.append(item)
for item in new_info:
print(item)
вывод
[0, 'alger', 'en stationnement', '1132']
[1620, 'Place du 1er Mai', '0:27:00', '1002']
[1800, 'Vieux Kouba', '0:30:00', '1134']
[3420, 'garidi', '0:57:00', '1004']
[3600, 'Vieux Kouba', '1:00:00', '1136']
[5220, 'Place du 1er Mai', '1:27:00', '1006']
[6000, 'alger', '1:40:00', '1132']
[9420, 'Hamma', '2:37:00', '1004']
[11220, 'Hamma', '3:07:00', '1006']