Получение одинаковых элементов списка python
lst = [1, 1, 2, 2, 3, 3]
Как получить одинаковые элементы списка, чтобы получилось так:
lst_1 = [1, 1]
lst_2 = [2, 2]
lst_3 = [3, 3]
или:
lst = ["2:1", "1:1", "1:2", "2:2", "3:1", "3:2"]
чтобы получилось так:
lists = [["2:1", "2:2"], ["1:1", "1:2"], ["3:1", "3:2"]]
или:
lst = ["55:36:070401:12", "55:36:061002:13", "55:36:070401:11", "55:36:061002:16", "54:35:000000:9", "54:35:000000:5"]
чтобы получилось так:
lst = [["55:36:070401:12", "55:36:070401:11"], ["55:36:061002:13", "55:36:061002:16"], ["54:35:000000:9", "54:35:000000:5"]]
Сравнивать нужно по числам, которые идут после 2 - го двоеточия до 3 - его двоеточия
Ответы (1 шт):
Автор решения: strawdog
→ Ссылка
lst = [1, 1, 2, 2, 3, 3]
lists = []
for x in set(lst):
lists.append([y for y in lst if y==x])
print(lists)
[[1, 1], [2, 2], [3, 3]]
Для второго варианта (со строками):
lst = ["2:1", "1:1", "1:2", "2:2", "3:1", "3:2"]
lists = []
for x in set([i[0][0] for i in lst]):
lists.append([y for y in lst if y.startswith(x)])
print(sorted(lists))
[['1:1', '1:2'], ['2:1', '2:2'], ['3:1', '3:2']] UPDATE
Изменил, в соответствии с измененным условиями вопроса. Для строковых списков с разделителем ":" будет такая функция:
lst = ["55:36:070401:12", "55:36:061002:13", "55:36:070401:11", "55:36:061002:16", "54:35:000000:9", "54:35:000000:5"]
def myfunc(a: list)->list:
lists=[]
for x in set([i.rsplit(":", 1)[0] for i in a]):
lists.append([y for y in a if y.startswith(x)])
return sorted(lists)
print(myfunc(lst))
print(myfunc(["2:1", "1:1", "1:2", "2:2", "3:1", "3:2"]))
что, соответственно, выдаст:
[['54:35:000000:9', '54:35:000000:5'], ['55:36:061002:13', '55:36:061002:16'], ['55:36:070401:12', '55:36:070401:11']]
[['1:1', '1:2'], ['2:1', '2:2'], ['3:1', '3:2']]