Ответ 1
b = [i for sub in a for i in sub]
Это сделает трюк.
Следуя моему предыдущему вопросу Как группировать элементы списка в кортеж?
Если у меня есть список кортежей, например
a = [(1,3),(5,4)]
Как я могу распаковать кортежи и переформатировать его в один список
b = [1,3,5,4]
Я думаю, что это также связано с функцией iter
, но я действительно не знаю, как это сделать. Пожалуйста, просветите меня.
b = [i for sub in a for i in sub]
Это сделает трюк.
In [11]: list(itertools.chain(*a))
Out[11]: [1, 3, 5, 4]
Если вам просто нужно выполнить итерацию по 1, 3, 5, 4
, вы можете избавиться от вызова list()
.
import itertools
b = [i for i in itertools.chain(*[(1,3),(5,4)])]
Другой способ:
a = [(1,3),(5,4)]
b = []
for i in a:
for j in i:
b.append(j)
print b
Это будет обрабатывать только кортежи внутри списка (a) tho. Вам нужно добавить инструкции if-else, если вы хотите также разобрать свободные переменные, например:
a = [(1,3),(5,4), 23, [21, 22], {'somevalue'}]
b = []
for i in a:
if type(i) == (tuple) or type(i) == (list) or type(i) == (set):
for j in i:
b.append(j)
else:
b.append(i)
print b
Просто перебирайте список a и распакуйте кортежи:
l = []
for x,y in a:
l.append(x)
l.append(y)