Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在元组中合并列表,或在列表中合并列表,而不使用itertools,从而合并元组对象_Python_List_Python 3.x_Tuples_Itertools - Fatal编程技术网

Python:在元组中合并列表,或在列表中合并列表,而不使用itertools,从而合并元组对象

Python:在元组中合并列表,或在列表中合并列表,而不使用itertools,从而合并元组对象,python,list,python-3.x,tuples,itertools,Python,List,Python 3.x,Tuples,Itertools,我有一个列表,其中包含包含列表的元组。像这样: 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....,] ), ....

我有一个列表,其中包含包含列表的元组。像这样:

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_previous_list = [[[a1a, a2a,..,], [a1b, a2b,...,], [a1c, a2c,...,]],
    [[b1a, b2a,..,], [b1b, b2b,...,], [b1c, b2c,...,]], [[c1a, c2a,..,],
    [c1b, c2b,...,], [c1c, c2c,...,]]]
新列表包含27个列表(3*3*3),如下所示:

我用过:

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,在处理大型计算时,始终使用迭代器而不是列表。如果您一直使用迭代器,您将永远不会得到我的旧列表。

如果我理解正确,这就是您需要的:

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代码,但这是我试图理解您的问题的唯一方法。

请您将问题的格式设置得更好一点,以便非常清楚您拥有的数据是什么以及预期的结果是什么?首先感谢Chris编辑我的问题。现在看起来更合适了。关于@Walter_Ritzel:数据是代表备用容量市场(电力拍卖)中增量容量报价投标值的数值。我需要将这些值与我设计的单独市场清算模型中的变量结合起来。希望这能回答你的问题也许是我,但我还是不明白你现在的状态和你想要的状态。。。太多在例子中。有一个简短完整的例子会很有用,这样我们可以评估您需要什么。说到这里,我要说的是:在你的例子中,虽然[c1c,c2c,…]在你的源代码中,但它没有出现在你的目标代码中……感谢你的帮助#C Panda,这并不完全是我所需要的,但仍然非常有助于帮助我达成最终解决方案。关于通过使用迭代器来避免列表的使用,您肯定是对的,但由于我还是一名初级程序员,我不知道如何做到这一点。我的目标其实很简单,但我现在使用的代码真的很脏。无论如何,谢谢你的帮助!你应该做什么取决于手头的问题。但是您可以首先将外部的
[]
(列表comp)替换为
()
(生成器表达式)。使用生成器越多,代码的声明性就越强,这在数据处理中是一件非常好的事情。声明性代码看起来像unix shell中的管道。尽管对这个问题的解释可能有些模糊,但我仍然得到了我一直在寻找的答案。非常感谢@Walter_Ritzel,由于你的帮助,这个学生将更快地获得硕士学位
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)