从 python 列表中删除空行
delete empty rows from a python list
现在我有一个 python 列表,如下所示:
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ]
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ]
['87878', '', 'cn/zhs/fedex/inet/label/international']
['', '2015-10-21 00:00:18', '' ]
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ]
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]
这个二维列表有3列,超过一万行。
如您所见,有些行在 [0]
处缺少元素,有些行在 [1]
处缺少元素,有些行在 [2]
处缺少元素。
有些具有所有三个元素。
我需要删除所有那些没有三个元素的行。
也就是说,只要一行缺少一个元素,就需要将其删除。
因此,对于上面的列表,需要删除 row[0][3][4][5][6]
。
执行删除功能后,列表应如下所示:
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ]
我在考虑这个:
for i in range(len(D)): //D is the name of my list
if D[i][0] =='' or D[i][1]=='' or D[i][2] =='':
del D[i]
但这不起作用,因为当您截断列表时,len(D)
正在发生变化,您将无法遍历整个列表。
我也想过这个:
for item in D:
if item[0]=='' or item[1]=='' or item[2] =='':
del item
这也不行。
如果你能想出点什么,我将不胜感激。
我会使用 D = filter(all, D)
或 D = filter(lambda x: '' not in x, D)
,具体取决于您对“empty”的确切定义。
考虑这个程序:
from pprint import pprint
D = [
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ],
['87878', '', 'cn/zhs/fedex/inet/label/international'],
['', '2015-10-21 00:00:18', '' ],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ],
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ],
]
D2 = filter(all, D)
D3 = filter(lambda x: '' not in x, D)
assert D2 == D3
pprint(D2)
pprint(D3)
郑重声明,如果您将示例数据显示为我可以复制和粘贴的实际列表,那将会很有帮助。
all
函数 returns 仅当 it 参数的所有元素都为真时才为真。例如:
>>> all([1, 2, 3])
True
>>> all(['', 2, 3])
False
>>> all([1, 2, 0])
False
通过在列表推导中遍历您的列表列表,可以相对容易地生成您想要的内容。
tlist = [
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ],
['87878', '', 'cn/zhs/fedex/inet/label/international'],
['', '2015-10-21 00:00:18', '' ],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ],
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]]
result = [r for r in tlist if all(x for x in r)]
result
现在将包含
[[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking']]
现在我有一个 python 列表,如下所示:
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ]
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ]
['87878', '', 'cn/zhs/fedex/inet/label/international']
['', '2015-10-21 00:00:18', '' ]
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ]
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]
这个二维列表有3列,超过一万行。
如您所见,有些行在 [0]
处缺少元素,有些行在 [1]
处缺少元素,有些行在 [2]
处缺少元素。
有些具有所有三个元素。
我需要删除所有那些没有三个元素的行。
也就是说,只要一行缺少一个元素,就需要将其删除。
因此,对于上面的列表,需要删除 row[0][3][4][5][6]
。
执行删除功能后,列表应如下所示:
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ]
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ]
我在考虑这个:
for i in range(len(D)): //D is the name of my list
if D[i][0] =='' or D[i][1]=='' or D[i][2] =='':
del D[i]
但这不起作用,因为当您截断列表时,len(D)
正在发生变化,您将无法遍历整个列表。
我也想过这个:
for item in D:
if item[0]=='' or item[1]=='' or item[2] =='':
del item
这也不行。
如果你能想出点什么,我将不胜感激。
我会使用 D = filter(all, D)
或 D = filter(lambda x: '' not in x, D)
,具体取决于您对“empty”的确切定义。
考虑这个程序:
from pprint import pprint
D = [
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ],
['87878', '', 'cn/zhs/fedex/inet/label/international'],
['', '2015-10-21 00:00:18', '' ],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ],
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ],
]
D2 = filter(all, D)
D3 = filter(lambda x: '' not in x, D)
assert D2 == D3
pprint(D2)
pprint(D3)
郑重声明,如果您将示例数据显示为我可以复制和粘贴的实际列表,那将会很有帮助。
all
函数 returns 仅当 it 参数的所有元素都为真时才为真。例如:
>>> all([1, 2, 3])
True
>>> all(['', 2, 3])
False
>>> all([1, 2, 0])
False
通过在列表推导中遍历您的列表列表,可以相对容易地生成您想要的内容。
tlist = [
['', '2015-10-21 00:00:03', 'jp/ja/fedex/inet/label/international' ],
[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic' ],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home' ],
['87878', '', 'cn/zhs/fedex/inet/label/international'],
['', '2015-10-21 00:00:18', '' ],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking' ],
['', '2015-10-21 00:00:21', 'sg/en/fedex/inet/label/international' ]]
result = [r for r in tlist if all(x for x in r)]
result
现在将包含
[[398798, '2015-10-21 00:00:10', 'us/en/fedex/inet/label/domestic'],
[878787, '2015-10-21 00:00:16', 'us/en/fedex/fedexcares/home'],
[5454, '2015-10-21 00:00:19', 'us/en/fedex/sameday/main tracking']]