Я новичок в Python. Я пытаюсь объединить два списка кортежей попарно в один список кортежей, где кортежи имеют определенную длину (скажем, 8):
Например,
ввод:
x = [(0,1,2,3),(4,5,6,7),(8,9,10,11)]
y = [('a','b','c','d'),('e','f','g','h'),('i','j','k','l')]
вывод:
[('a', 0, 'b', 1, 'c', 2, 'd', 3),
('e', 4, 'f', 5,'g', 6, 'h', 7),
('i', 8, 'j', 9, 'k', 10, 'l', 11)]
Я пробовал несколько разных циклов, которые пытаются объединить кортежи попарных комбинаций, а затем добавить их для заданной длины, но безуспешно. Смотри ниже.
new = []
for n in range(len(x)):
for p in range(len(x[n])):
if p == len(x[n])-1:
new += [(x[n][p],y[n][p])]
for v in range(len(x[n])):
newer += new[v]
else:
new += [(x[n][p],y[n][p])]
Приведенный выше «новый» список бесполезен, но «новый» список предоставляет попарную комбинацию кортежей, которые я ищу, как я полагаю, по крайней мере, слияние().
[('a', 0),('b', 1),('c', 2),('d', 3),('e', 4),('f', 5),('g', 6),('h', 7),('i', 8) ('j', 9),('k', 10), ('l', 11)]
Я думал, что мог бы сделать своего рода окно, которое читалось бы по нужной длине (в данном случае четыре) и объединяло выбор, но у меня возникли проблемы с тем, чтобы заставить это работать.
Любые другие решения приветствуются.
b
, и такие побочные эффекты в понимании списка не такие питонические. Просто используйте вместо этого циклfor
, если вы хотите такое поведение 06.02.2020b
строго внутри понимания списка с[tuple(b) for b in [[None] * 8] for b[::2], b[1::2] in zip(y, x)]
(после этого он даже не существует). Хотя мне это нравится меньше. Я думаю, что это также зависит от контекста. Представьте, что эти две строки инкапсулированы в функцию (поэтому функция ничего не делает и возвращает список). Тогда этот побочный эффект очень локален. 06.02.2020b
. У меня нет под рукой хорошего учебника или около того, мне тоже нужно его поискать. 06.02.2020for
или удалить побочные эффекты. 08.02.2020