Python:合并元组中的列表或合并列表中的列表,而不使用 itertools 和元组对象
Python: Merge lists within tuples OR combining lists within lists within lists without itertools and thus tuple object
我有一个列表,其中包含包含列表的元组。像这样:
my_list = [(
[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17],
[B1, B2, B3, B4, B5, B6],
[C1, C2, C3, C4, C5]
),
(
[A1a, A2a, ......],
[B1a, B2a....],
[C1a, C2a....,]
), ........ *27]
我想从每个元组中合并前三个列表中的项目,因此 A1
...C5
变成 pandas DataFrame
因为我需要做和他们一起计算。但是我不知道如何对该对象进行迭代(例如将项目附加到新列表中)并且失败了。
我之所以以这种方式得到my_list
是因为我想做一个列表的组合。所以我想转 my_previous_list
:
my_previous_list = [[[a1a, a2a,..,], [a1b, a2b,...,], [a1c, a2c,...,]],
[[b1a, b2a,..,], [b1b, b2b,...,], [b1c, b2c,...,]], [[c1a, c2a,..,],
[c1b, c2b,...,], [c1c, c2c,...,]]]
进入一个包含 27 个列表 (3*3*3) 的新列表:
[
[a1a, a2a..., b1a, b2a..., c1a, c2a...,],
[a1a, a2a..., b1a, b2a..., c1b, c2b...,] ,
[a1a, a2a..., b1b, b2b..., c1b, c2b...,],
[a1b, a2b..., b1a, b2a..., c1a, c2a...,] ........ *27]
我用过:
my_list = list(itertools.product(*my_previous_list)
得到我的结果。
有谁知道如何合并元组中的列表并将它们变成数据框?或者如何使用与我采用的 itertools
方法不同的方法来绕过这个问题。
可以这样做
def g():
for t in zip(*my_old_list):
yield (e for l in t for e in l)
my_new_list = [list(l) for l in g()]
看看是否有效。也可以这样写。
my_new_list = [[e for l in t for e in l] for t in zip(*my_old_list)]
Bdw,在处理大型计算时始终使用迭代器而不是列表。如果你一直在使用迭代器,你永远不会得到 my_old_list
。
如果我没理解错的话,这就是你需要的:
import pprint
my_previous_list = [[['a1a','a2a','a3a'], ['a1b','a2b','a3b'], ['a1c','a2c','a3c']],[['b1a','b2a','b3a'],['b1b','b2b','b3b'],['b1c','b2c','b3c']],[['c1a','c2a','c3a'],['c1b','c2b','c3b'],['c1c','c2c','c3c']]]
print('Original')
pprint.pprint(my_previous_list)
all_lists = []
for a in my_previous_list[0]:
for b in my_previous_list[1]:
for c in my_previous_list[2]:
line = []
line.append(a + b + c)
all_lists.append(line)
print('Processed')
pprint.pprint(all_lists)
它不是 pythonic 代码,但这是我试图理解您的问题的唯一方法。
我有一个列表,其中包含包含列表的元组。像这样:
my_list = [(
[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17],
[B1, B2, B3, B4, B5, B6],
[C1, C2, C3, C4, C5]
),
(
[A1a, A2a, ......],
[B1a, B2a....],
[C1a, C2a....,]
), ........ *27]
我想从每个元组中合并前三个列表中的项目,因此 A1
...C5
变成 pandas DataFrame
因为我需要做和他们一起计算。但是我不知道如何对该对象进行迭代(例如将项目附加到新列表中)并且失败了。
我之所以以这种方式得到my_list
是因为我想做一个列表的组合。所以我想转 my_previous_list
:
my_previous_list = [[[a1a, a2a,..,], [a1b, a2b,...,], [a1c, a2c,...,]],
[[b1a, b2a,..,], [b1b, b2b,...,], [b1c, b2c,...,]], [[c1a, c2a,..,],
[c1b, c2b,...,], [c1c, c2c,...,]]]
进入一个包含 27 个列表 (3*3*3) 的新列表:
[
[a1a, a2a..., b1a, b2a..., c1a, c2a...,],
[a1a, a2a..., b1a, b2a..., c1b, c2b...,] ,
[a1a, a2a..., b1b, b2b..., c1b, c2b...,],
[a1b, a2b..., b1a, b2a..., c1a, c2a...,] ........ *27]
我用过:
my_list = list(itertools.product(*my_previous_list)
得到我的结果。
有谁知道如何合并元组中的列表并将它们变成数据框?或者如何使用与我采用的 itertools
方法不同的方法来绕过这个问题。
可以这样做
def g():
for t in zip(*my_old_list):
yield (e for l in t for e in l)
my_new_list = [list(l) for l in g()]
看看是否有效。也可以这样写。
my_new_list = [[e for l in t for e in l] for t in zip(*my_old_list)]
Bdw,在处理大型计算时始终使用迭代器而不是列表。如果你一直在使用迭代器,你永远不会得到 my_old_list
。
如果我没理解错的话,这就是你需要的:
import pprint
my_previous_list = [[['a1a','a2a','a3a'], ['a1b','a2b','a3b'], ['a1c','a2c','a3c']],[['b1a','b2a','b3a'],['b1b','b2b','b3b'],['b1c','b2c','b3c']],[['c1a','c2a','c3a'],['c1b','c2b','c3b'],['c1c','c2c','c3c']]]
print('Original')
pprint.pprint(my_previous_list)
all_lists = []
for a in my_previous_list[0]:
for b in my_previous_list[1]:
for c in my_previous_list[2]:
line = []
line.append(a + b + c)
all_lists.append(line)
print('Processed')
pprint.pprint(all_lists)
它不是 pythonic 代码,但这是我试图理解您的问题的唯一方法。