如何从长度可变的元组列表中提取元组

2024-10-02 04:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,它来自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循环可以提取列表中的项目,如下所示:

for item in mylist:
   mylist1 = item

但是上面代码的问题是list1将只包含最后一个元组,而其他元组不会被存储。我需要把一个循环放在一个循环或类似的东西里面

怎么做


Tags: 列表fffiii元组bbbcccdddaaa
3条回答

在你的问题中,你说

the problem with the code above is that list1 will only contain the last tuple and the others are not stored anyway

不过,这并不完全正确。列表完成后是正确的,但是,当循环仍在运行时,列表1将按顺序设置为列表的每个项。因此,如果将列表1添加到循环中的电子邮件中,列表中的每一项都将被添加

我会这样做:

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

或者,更简单地说:

email += '\n'.join(map(list, your_list))

将每个内部元组追加到新列表。因此,您的最终列表将成为列表列表:

[['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']

为了完整起见,以下是原始问题的答案:

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}])")

然而,正如讨论所表明的,这不是一个好主意,当然有一种更简单的方法来实现您想要做的事情。上面的代码将在内存中创建一组未在代码中显式定义的变量,因此在将来调试和维护代码时肯定会引起麻烦

相关问题 更多 >

    热门问题