从单行列表解析中解压缩列表

时间:2017-12-29 01:05:20

标签: python list list-comprehension

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 个答案:

答案 0 :(得分: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包装在一个列表中并将其与另一个连接。

答案 1 :(得分:4)

您需要将内部列表连接在一起。根据你正在使用的python版本,有几种方法可以做到这一点。

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

mylist[x]的所有值解压缩到列表中。可能是大多数" pythonic" 方式,但只适用于python 3.5 up

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

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