@zxqb

Поиск, удаление и замена строки из кортежа в списке, как реализовать?

Есть массив [('a', 'd', 'z', 'x'), ('b', 'e ', 'k', 'l'), ('b', 'e', 'm', 'n'), ('c', 'f', 'g', 'h'), ('c', 'f', 'y', 'w')]
Первые две строки кортежей могут быть одинаковыми и если это так, то нужно объединить эти два кортежа в один общий
Условие решения:
Одинаковые строки должны остаться в одном экземпляре
Сами строки могут быть в длину не только 1 символ и с пробелами, например: 'sdgs sdbvfsb'
Ожидаемый результат:
[('a', 'd', 'z', 'x'), ('b', 'e ', 'k', 'l', 'm', 'n'), ('c', 'f', 'g', 'h', 'y', 'w')]
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
from itertools import repeat
d = {}
for x in [('a', 'd', 'z', 'x'), ('b', 'e ', 'k', 'l'), ('b', 'e', 'm', 'n'), ('c', 'f', 'g', 'h'), ('c', 'f', 'y', 'w')]:
    d.setdefault(x[:2], {}).update(zip(x, repeat(None)))
print([list(v.keys()) for v in d.values()])

Но у вас во втором кортеже пробел около "e" и, строго говоря, ваше решение неверно.
Либо пробел уберите, либо можно стрипнуть ключи заменив x[:2] на tuple(map(str.strip, x[:2]))
Тут не использованы множества, чтобы не терять порядок элементов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
>>> from collections import defaultdict
>>> d = defaultdict(tuple)
>>> for i in your_list:
	      d[i[:2]] += i[2:]
>>> result = [i + d[i] for i in d]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы