相关疑难解决方法(0)

压扁不规则的列表列表

是的,我知道这个主题已经被覆盖过了(这里,这里,这里,这里),但据我所知,除了一个之外,所有解决方案都在这样的列表中失败:

L = [[[1, 2, 3], [4, 5]], 6]
Run Code Online (Sandbox Code Playgroud)

期望的输出是什么

[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,一个迭代器.我看到的唯一适用于任意嵌套的解决方案可以在这个问题中找到:

def flatten(x):
    result = []
    for el in x:
        if hasattr(el, "__iter__") and not isinstance(el, basestring):
            result.extend(flatten(el))
        else:
            result.append(el)
    return result

flatten(L)
Run Code Online (Sandbox Code Playgroud)

这是最好的型号吗?我忽略了什么吗?任何问题?

python optimization list flatten

412
推荐指数
16
解决办法
12万
查看次数

在Python中展平浅层列表

是否有一种简单的方法可以使用列表推导来展平迭代列表,或者失败,你会认为什么是平衡这样的浅层列表,平衡性能和可读性的最佳方法?

我尝试使用嵌套列表理解来压缩这样的列表,如下所示:

[image for image in menuitem for menuitem in list_of_menuitems]
Run Code Online (Sandbox Code Playgroud)

但我在NameError那里遇到麻烦,因为name 'menuitem' is not defined.谷歌搜索并浏览Stack Overflow后,我得到了一个reduce声明所需的结果:

reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

但是这个方法相当难以理解,因为我需要那个list(x)调用,因为x是一个Django QuerySet对象.

结论:

感谢所有为此问题做出贡献的人.以下是我学到的内容摘要.我也将其作为社区维基,以防其他人想要添加或更正这些观察结果.

我原来的reduce语句是多余的,用这种方式编写得更好:

>>> reduce(list.__add__, (list(mi) for mi in list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

这是嵌套列表理解的正确语法(Brilliant summary dF!):

>>> [image for mi in list_of_menuitems for image in mi]
Run Code Online (Sandbox Code Playgroud)

但这些方法都不如使用效率高itertools.chain:

>>> from itertools import chain
>>> list(chain(*list_of_menuitems))
Run Code Online (Sandbox Code Playgroud)

正如@cdleary指出的那样,通过使用chain.from_iterable如下所示来避免*操作符魔术可能是更好的风格:

>>> chain = itertools.chain.from_iterable([[1,2],[3],[5,89],[],[6]])
>>> print(list(chain))
>>> [1, 2, …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

382
推荐指数
10
解决办法
17万
查看次数

Python中的最大递归深度是多少,以及如何增加它?

我在这里有这个尾递归函数:

def recursiveFunction(n, sum):
    if n < 1:
        return sum
    else:
        return recursiveFunction(n-1, sum+n)

c = 998
print(recursiveFunction(c, 0))
Run Code Online (Sandbox Code Playgroud)

它可以工作到n = 997,然后它就会中断并吐出"比较时超出的最大递归深度" RuntimeError.这只是一个堆栈溢出?有办法解决它吗?

python recursion

357
推荐指数
13
解决办法
40万
查看次数

如何解压深嵌套的可迭代结构

比方说,我有一个包含许多子元素的结构,其中一些子结构是结构:

v = [1, 2, 3, [4, (5, 6)]]
Run Code Online (Sandbox Code Playgroud)

如何将这些解包为一系列仅包含结构内容而不包含结构的名称?

尝试使用星号表达式a, b, c, d, e, f = v引发一段ValueError时间会为名称分配结构.我怎样才能解压缩它们以获得:

print(a, b, c, d, e, f)
Run Code Online (Sandbox Code Playgroud)

打印:

1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

python iterable python-3.x iterable-unpacking

4
推荐指数
1
解决办法
344
查看次数

将单例矩阵的熊猫数据帧转换为数字数据帧

我有一个单例 Python 矩阵的 Pandas 数据框,我想将其转换为值的数据框。我可以使用 apply 来转换单个列,但想知道是否可以对整个数据帧执行此操作。这是我到目前为止所拥有的:

数据框df:

+-----------+-----------+-----------+-----------+-----------+-----------+
|   Col1    |   Col2    |   Col3    |   Col4    |    Col5   |    Col6   |
+-----------+-----------+-----------+-----------+-----------+-----------+
| [[[[4]]]] | [[[[0]]]] | [[[[1]]]] | [[[[0]]]] | [[[[0]]]] | [[[[1]]]] |
| [[[[1]]]] | [[[[1]]]] | [[[[0]]]] | [[[[2]]]] | [[[[1]]]] | [[[[1]]]] |
| [[[[0]]]] | [[[[2]]]] | [[[[3]]]] | [[[[1]]]] | [[[[1]]]] | [[[[0]]]] |
+-----------+-----------+-----------+-----------+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)

转换单个列的代码:

+-----------+-----------+-----------+-----------+-----------+-----------+
|   Col1    |   Col2    |   Col3    |   Col4    |    Col5   |    Col6   |
+-----------+-----------+-----------+-----------+-----------+-----------+
| …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

2
推荐指数
1
解决办法
138
查看次数

展平列表和标量列表

所以对于矩阵,我们有像numpy.flatten()这样的方法

np.array([[1,2,3],[4,5,6],[7,8,9]]).flatten()
Run Code Online (Sandbox Code Playgroud)

[1,2,3,4,5,6,7,8,9]

如果我想从获得np.array([[1,2,3],[4,5,6],7])[1,2,3,4,5,6,7]
是否存在执行类似功能的现有功能?

python arrays numpy list multidimensional-array

1
推荐指数
1
解决办法
1034
查看次数