Как извлечь кортежи из списка кортежей, длина которых может быть переменной - PullRequest
0 голосов
/ 10 июля 2020

У меня есть список кортежей, который взят из другой части моего Python скрипта и может иметь переменную длину. Я хочу извлечь кортежи отдельно и сохранить их в нескольких новых списках.

Вот пример того, что я могу получить:

mylist = [
('aaa', 'bbb', 'ccc'),
('ddd', 'eee', 'fff'),
('ggg', 'hhh', 'iii'),
('jjj', 'kkk', 'lll'), 
... etc.
]

И результат, который я хочу, следующий:

mylist1 = ['aaa', 'bbb', 'ccc']
mylist2 = ['ddd', 'eee', 'fff']
mylist3 = ['ggg', 'hhh', 'iii']
mylist4 = ['jjj', 'kkk', 'lll']
etc.

Поскольку я начинаю Python, я знаю, что for l oop может извлекать элементы из моего списка, например:

for item in mylist:
   mylist1 = item

Но проблема с приведенным выше кодом состоит в том, что list1 будет содержать только последний кортеж, а остальные в любом случае не сохранятся. Мне нужно поместить al oop внутри al oop или что-то в этом роде.

Как это сделать?

Ответы [ 4 ]

2 голосов
/ 10 июля 2020

В своем вопросе вы сказали:

проблема с приведенным выше кодом заключается в том, что list1 будет содержать только последний кортеж, а остальные не сохраняются в любом случае

Однако это не совсем так. Это верно после того, как список завершен, но пока l oop все еще работает, list1 будет установлен для каждого элемента списка по очереди. Следовательно, если вы добавите list1 в свой адрес электронной почты в пределах l oop, каждый элемент списка будет добавлен.

Я бы сделал что-то вроде этого:

for item in your_list:
   email += list(item)
   email += '\n'

Или еще просто:

email += '\n'.join(map(list, your_list))
1 голос
/ 10 июля 2020

Для полноты картины вот ответ на исходный вопрос:

mylist = [
('aaa', 'bbb', 'ccc'),
('ddd', 'eee', 'fff'),
('ggg', 'hhh', 'iii'),
('jjj', 'kkk', 'lll'), 
]

for i in range(len(mylist)):
    exec(f"list{i+1} = list(mylist[{i}])")

Однако, как ясно из обсуждения, это не очень хорошая идея, и, безусловно, есть более простой способ достичь того, что вы хотеть сделать. Приведенный выше код создаст в памяти набор переменных, которые явно не определены в коде, поэтому, безусловно, вызовет головную боль, когда дело доходит до отладки и поддержки кода в будущем.

1 голос
/ 10 июля 2020

добавить каждый внутренний кортеж в новый список. так что ваш окончательный список станет списком списков:

[['aaa', 'bbb', 'ccc'], [['ddd', 'eee', 'fff'],....]
fin_list = []

original_list = [
('aaa', 'bbb', 'ccc'),
('ddd', 'eee', 'fff'),
('ggg', 'hhh', 'iii'),
('jjj', 'kkk', 'lll'), 
.......
]


for each_tuple in original_list:
    fin_list .append(list(each_tuple))

Вывод:

[['aaa', 'bbb', 'ccc'], ['ddd', 'eee', 'fff'], ['ggg', 'hhh', 'iii'], ['jjj', 'kkk', 'lll']]

ПОДХОД 2

class XY_Lists(object):
  def __init__(self,list_of_tups):
    count=0
    for each_tup in list_of_tups:
      setattr(self,"List_{}".format(count),list(each_tup))
      count+=1

my_named_list=XY_Lists(original_list)
print(my_named_list.List_0)
# you can keep accessing the class object attributes one by one

вывод:

['aaa', 'bbb', 'ccc']
0 голосов
/ 10 июля 2020

Хотя этот код не сможет динамически распределять кортежи по переменным, но он может извлекать кортежи из данного списка и преобразовывать их в список с помощью «понимания списка». Пожалуйста, дайте мне знать, возможно ли распределение динамических c.

Mylist = [('aaa', 'bbb', 'ccc'), ('ddd', 'eee', 'fff'), ('ggg', 'hhh', 'iii'), ('jjj', 'kkk', 'lll')]

for i in range(len(Mylist)):
   print("Mylist",i+1,"=",[x for x in Mylist[i]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...