过滤具有特定内容的子列表的列表列表

时间:2016-03-28 15:58:09

标签: python

目前我正在尝试过滤具有52:3尺寸的2D列表。我想根据行过滤列表。

输入列表的示例行为:

list = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']]

列表过滤的输出需要在行中存在两个空格('')时。它需要保留该行并将该行放入一个新变量中。因此,示例输出将是:

new = [[u'Fe', '', ''],[u'Ca', '', '']]

1 个答案:

答案 0 :(得分:0)

一些指示:

请勿使用变量名称list,因为您将隐藏内置列表。

这里有一个列表列表,其中一些列表包含空字符串'',而不是空格,' '

话虽如此,您可以计算任何子列表x包含的空字符串数,如果该计数等于2,则在列表理解的帮助下将它们放入新列表中:

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']]
>>> result = [x for x in lst if x.count('') == 2]
>>> result
[[u'Fe', '', ''], [u'Ca', '', '']]

请注意,由于我们未在此处复制任何内容,因此将在所有引用/名称中看到对子列表的更改:

>>> result[0][0] = 'Xe'
>>> result
[['Xe', '', ''], [u'Ca', '', '']]
>>> lst
[[u'Kr', u'Se', ''], ['Xe', '', ''], [u'Ca', '', '']]

如果不需要这种行为,请在列表推导中创建列表副本(与前一个示例的唯一区别是使用x[:]而不是x):

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']]
>>> result = [x[:] for x in lst if x.count('') == 2]
>>> result
[[u'Fe', '', ''], [u'Ca', '', '']]
>>> result[0][0] = 'Xe'
>>> result
[['Xe', '', ''], [u'Ca', '', '']]
>>> lst
[[u'Kr', u'Se', ''], [u'Fe', '', ''], [u'Ca', '', '']]