Python 列表变量

Python 列表变量,python,list-comprehension,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]] 我不明白这里的清单。如果无法将其转换为迭代

我在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]]
我不明白这里的清单。如果无法将其转换为迭代的
。我始终使用以下语法:

[k for k in smthiterable (if condition)]   

我试着将下划线
\uu
更改为其他内容,但仍然有效。但如果我移除它,它不会。它的用途是什么?

itertools.groupby
返回项目对的iterable;在每一对中,首先是分组键,然后是属于该组的项。对于k,u在iterable
中的构造
解压这些对,它直接类似于赋值语句
k,=(0,1)
如何将元组对象解压为两个名称。这里使用
\uu
作为变量名是无关紧要的(这是Python中常用的约定,表示该值未使用)

您介绍的代码并不是对
groupby
的特别令人信服的使用,因为group对象被丢弃,只使用了唯一的键

下面的列表理解更像python,它避免了创建“无用变量”:

下划线(
\u
)与其他变量非常相似,它不是特殊的语法。如果让你感到困惑,就假装它是一个
x
。下划线通常用于表示“未使用的”变量
itertools.groupby
返回一个iterable,其中每次迭代都返回另一个iterable(后一个iterable中的每一个总是有两个元素)。所以
k,
语法只是简单地进行元组解包(请参见此处:)

k
将是每个iterable的第一个元素(第二个元素被分配给

为方便起见(如果链接失效),这里是链接中的浓缩示例:

产出:

Miller
Markov
Matthews

我不确定这两个问题是否重复。元组解包可能会增加混乱。我使用它来丢弃列表中的重复项。你的理解很好,我试过类似的方法,但没能成功。谢谢
soldiers = [('Steve', 'Miller'), ('Stacy', 'Markov'), ('Sonya', 'Matthews')]
for _, last_name in soldiers:
    # print the second element
    print(last_name)
Miller
Markov
Matthews