相关疑难解决方法(0)

在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元组扩展为函数 - 作为实际参数?

例如,这里expand()有魔力:

some_tuple = (1, "foo", "bar")

def myfun(number, str1, str2):
    return (number * 2, str1 + str2, str2 + str1)

myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
Run Code Online (Sandbox Code Playgroud)

我知道可以定义myfunmyfun((a, b, c)),但当然可能有遗留代码.谢谢

python tuples parameter-passing

375
推荐指数
5
解决办法
20万
查看次数

Python赋值解构

这三个表达式似乎是等价的:

a,b,c = line.split()
(a,b,c) = line.split()
[a,b,c] = line.split()
Run Code Online (Sandbox Code Playgroud)

他们编译成相同的代码吗?

哪一个更pythonic?

python destructuring

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

在Python中将多维列表转换为1D列表

像这样的多维列表l=[[1,2],[3,4]]可以通过执行转换为1D 列表sum(l,[]).任何人都可以解释一下这是怎么回事?

响应者说,这种技术只能用于"压扁"2D列表 - 它不适用于更高的多维列表.但如果重复,它确实如此.例如,如果A是3D列表,则sum(sum(A),[]),[])将A压缩为1D列表.

python

30
推荐指数
2
解决办法
6万
查看次数

使用不可迭代的列表元素将列表列表分解为单个列表

参考: python分解 列表在Python 中展平浅层列表

虽然上面提到的解决方案很有帮助,但我的问题略有不同,我想知道是否有一种pythonic方法来解决它.

a = [['a-3','b-3'],'r',['j']]
Run Code Online (Sandbox Code Playgroud)

我想要的是一种让'a'等于以下的简洁方法:

a = ['a-3','b-3','r','j']
Run Code Online (Sandbox Code Playgroud)

我被困在使用python 2.4所以2.4兼容的pythonic解决方案会很棒,但我仍然会发现2.7个以上的例子也很有趣.

主要的问题是,有非迭代的元件,否则该总和(LST,[])工作得很好,因为确实为2.7+链方法

python

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