pwn*_*uce 2 python list-comprehension
我在 stackoverflow 上找到了这个,它完全符合我的要求:
>>> k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4]]
>>> import itertools
>>> k.sort()
>>> list(k for k,_ in itertools.groupby(k))
[[1, 2], [3], [4], [5, 6, 2]]
Run Code Online (Sandbox Code Playgroud)
我不明白这里的列表理解。如果无法设法将其翻译为for iteration. 我总是使用以下语法:
[k for k in smthiterable (if condition)]
Run Code Online (Sandbox Code Playgroud)
我试图将下划线更改_为其他内容,它仍然有效。但如果我删除它,它不会。它有什么用?
itertools.groupby返回一个可迭代的项目对;在每一对中,您首先拥有分组密钥,然后拥有属于该组的项目。该构造将for k,_ in iterable这些对解包,这与赋值语句如何将k, _ = (0, 1)元组对象解包为两个名称的直接类比。利用_这里作为变量名是不重要的(这是Python中的常用惯例,表明值处于闲置)。
您提供的代码并不是特别令人信服的groupby,因为组对象被丢弃并且只使用了唯一键。
下面的列表推导更加 Pythonic,它避免了创建“无用变量”:
>>> [list(x) for x in sorted(set(map(tuple, k)))]
[[1, 2], [3], [4], [5, 6, 2]]
Run Code Online (Sandbox Code Playgroud)