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中平面映射元组列表列表?_Python_List_Python 2.7 - Fatal编程技术网

如何在Python中平面映射元组列表列表?

如何在Python中平面映射元组列表列表?,python,list,python-2.7,Python,List,Python 2.7,我正在使用日历并从中接收元组列表列表 calendar.Calendar.yeardays2calendar(calendar.Calendar(), year, 1)) 输出为: [[[[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6)], [(5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6)], [(12, 0), (13, 1),... 我想把它平面映射到简单的元组

我正在使用日历并从中接收元组列表列表

calendar.Calendar.yeardays2calendar(calendar.Calendar(), year, 1))
输出为:

[[[[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6)], [(5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6)], [(12, 0), (13, 1),...
我想把它平面映射到简单的元组列表,保存它们的顺序。在Python2.7中,将任何深度的列表映射到普通列表的最佳方法是什么

我想要的示例:

[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6),(5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6), (12, 0), (13, 1)...
尝试其他问题的代码-没有帮助。抱歉问了这么多愚蠢的问题,我是python新手


UPD我从这里尝试了函数-没有帮助

Python有一个函数可以展平一个嵌套级别。它的名字叫
itertools.chain.from\u iterable()
。如果应用三次,它将展平三个级别:

import itertools
flatten1 = itertools.chain.from_iterable
flattened_data = flatten1(flatten1(flatten1(your_data)))
for a, b in flattened_data:
    # whatever
更一般地说,将
n
级别变平的函数

def flatten_n(n, iterable):
    for x in reduce(apply, [itertools.chain.from_iterable] * n, iterable):
        yield x
递归展平所有列表的函数可能如下所示:

def flatten_lists(a):
    if isinstance(a, list):
        for b in a:
            for x in flatten_lists(b):
                yield x
    else:
        yield a
试试这个:

def flatten(x):
    if isinstance(x, list):
        return [a for i in x for a in flatten(i)]
    else:
        return [x]
这个答案与此类似:但是检查特定的
列表
类型,而不是iterable

用于优化、内存效率等。。您也可以使用
yield
操作

演示


如果您使用的是Python 2,那么以下一行程序解决方案目前可以工作:

import compiler, itertools

lpairs = [[[[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6)], [(5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6)], [(12, 0), (13, 1)]]]]

print [(x,y) for x,y in itertools.izip(*[iter(compiler.ast.flatten(lpairs))]*2)]
给出:

[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6), (12, 0), (13, 1)]

注意,Python
编译器
模块已被弃用。

您尝试的其他代码是什么,问题是什么?我没有收到错误,但它无法展平我的列表,因为所有示例都是针对类似[[1,3,4]、[4,3]、[3]的列表的这不是我的情况,你应该把你在问题中尝试过的东西贴出来。我理解这一点,因为我对编程并不陌生,只是对python:)但是如果它更深入呢?有没有更好的办法?在任何地方都可以工作deepness@maxpovver这取决于你想要什么。如果你只是展平任意的iterables,你也会展平元组。如果这是您想要的,您可以编写一个将所有列表展平的递归函数。您还可以编写一个通用函数,将要展平的级别数作为参数。你可以做到这一切,但这不是你自找的如果我没弄错,你的代码在这方面不会有帮助:[[1,2,3],[1,2,3],[[1,2,3],[1,2,3],[1,2,3]。@maxpovver:不,没有,因为这不是你要求的。尝试过你的代码后,它会丢失物品订单
[(0, 0), (0, 1), (0, 2), (1, 3), (2, 4), (3, 5), (4, 6), (5, 0), (6, 1), (7, 2), (8, 3), (9, 4), (10, 5), (11, 6), (12, 0), (13, 1)]