相关疑难解决方法(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万
查看次数

理解扁平序列序列?

如果我有序列序列(可能是元组列表),我可以使用itertools.chain()来展平它.但有时我觉得我宁愿把它写成一种理解.我只是想不出怎么做.这是一个非常具体的案例:

假设我想在序列中交换每对元素.我在这里使用字符串作为序列:

>>> from itertools import chain
>>> seq = '012345'
>>> swapped_pairs = zip(seq[1::2], seq[::2])
>>> swapped_pairs
[('1', '0'), ('3', '2'), ('5', '4')]
>>> "".join(chain(*swapped_pairs))
'103254'
Run Code Online (Sandbox Code Playgroud)

我在序列的偶数和奇数切片上使用zip来交换对.但我最终得到了一个现在需要扁平化的元组列表.所以我使用chain().有没有办法可以用理解来表达它?

如果你想发布你自己的解决方案来解决交换对的元素的基本问题,请继续,我会投票给任何教我新东西的东西.但是,即使答案是"不,你做不到",我也只会接受一个针对我的问题的答案.

python sequences list-comprehension

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

熊猫系列列表到一个系列

我有一个Pandas系列的字符串列表:

0                           [slim, waist, man]
1                                [slim, waistline]
2                                     [santa]
Run Code Online (Sandbox Code Playgroud)

如您所见,列表因长度而异.我想要一种有效的方法将其折叠成一个系列

0 slim
1 waist
2 man
3 slim
4 waistline
5 santa
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用分解列表

series_name.split(' ')
Run Code Online (Sandbox Code Playgroud)

但我很难将这些字符串放回一个列表中.

谢谢!

python string list series pandas

22
推荐指数
5
解决办法
1万
查看次数

如何将列表列表展平一步

我有一个元组列表列表

A= [ [(1,2,3),(4,5,6)], [(7,8,9),(8,7,6),(5,4,3)],[(2,1,0),(1,3,5)] ]
Run Code Online (Sandbox Code Playgroud)

外部列表可以具有任意数量的内部列表,内部列表可以具有任意数量的元组,元组总是具有3个整数.

我想生成元组的所有组合,每个列表中有一个:

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

一个简单的方法是使用类似的函数itertools.poduct() 但必须像这样调用它

itertools.product([(1,2,3),(4,5,6)], [(7,8,9),(8,7,6),(5,4,3)],[(2,1,0),(1,3,5)])
Run Code Online (Sandbox Code Playgroud)

即删除外部列表.我不知道该怎么做.有没有更好的方法来生成元组的所有组合?

python

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

标签 统计

python ×4

list-comprehension ×2

list ×1

pandas ×1

sequences ×1

series ×1

string ×1