从单行列表推导式中解压列表

4

我是一名Python初学者。我有一个列表嵌套的列表,我想根据mylist[x][0]中的值进行过滤,并为每个结果子列表添加索引值。给定以下列表推导式:

shortlist = [[x, mylist[x]] for x in range(1,20) if mylist[x][0] == 'TypeB']

我得到了以下输出:
[[11, ['TypeB', 'Kline', '', '', 'Category']],
 [12, ['TypeB', '', '[Aa]bc', '', 'Category3']],
 [13, ['TypeB', '', '[Z]bc', '', 'Category']],
 [14, ['TypeB', '', 'Kline', '[Aa]bc', 'Category4']],
 [15, ['TypeB', '', '', '[Z]bc', 'Category']],
 [16, ['TypeB', '', '', 'Kline', 'Category5']],
 [17, ['TypeB', '[Aa]bc', '', '', 'Category']],
 [18, ['TypeB', '[Z]bc', '', '', 'Category2']],
 [19, ['TypeB', 'Kline', '', '', 'Category']]]

这会创建一个子子列表,我猜我需要用更多的代码行来解包它,但如果可以纠正列表理解语法的话,我宁愿不那样做。我的目标是使第一行读取

[[11, 'TypeB', 'Kline', '', '', 'Category'],

...并且其余输出也随之而来。我试图

shortlist = [x, mylist[x] for x in range(1,20) if mylist[x][0] == 'TypeB']

并且

shortlist = [x for x in range(1,20) if mylist[x][0] == 'TypeB', mylist[x] for x in range(1,20) if mylist[x][0] == 'TypeB']

这两个语句都会产生语法错误。显然,我对列表推导式还不熟悉。我非常感谢您的帮助和指导。提前感谢您的时间。

2个回答

4
从您的输出来看,这应该可以工作:
shortlist = [[x] + mylist[x] for x in range(1,20) if mylist[x][0] == 'TypeB']

[x, mylist[x]] 呈现为 [11, ['TypeB', 'Kline', '', '', 'Category']] 时,你就知道
 x         -> 11
 mylist[x] -> ['TypeB', 'Kline', '', '', 'Category']

因此,您希望将x包装在列表中,并与其他内容串联起来。

4
你需要将内部列表连接在一起。根据你使用的Python版本,有几种方法可以实现这一点。
shortlist = [[x, *mylist[x]] for x in range(1,20) if mylist[x][0] == 'TypeB']

将会把mylist[x]的所有值解包到列表中。这可能是最具有“Python风格”的方法,但是只能在Python版本 3.5以上才能使用。

shortlist = [[x] + mylist[x] for x in range(1,20) if mylist[x][0] == 'TypeB']

将创建一个仅包含x的列表,然后将mylist[x]添加到结尾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接