目前我正在尝试过滤具有52:3尺寸的2D列表。我想根据行过滤列表。
输入列表的示例行为:
list = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']]
列表过滤的输出需要在行中存在两个空格('')时。它需要保留该行并将该行放入一个新变量中。因此,示例输出将是:
new = [[u'Fe', '', ''],[u'Ca', '', '']]
答案 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', '', '']]