如何删除列表列表中的最后一个元素?

时间:2014-12-28 21:47:20

标签: python list parsing python-2.7

我有以下列表:

l = [["string string...string, 'tag'"],["string....string, 'tag'"],...,["string...string, 'tag'"]]

如何从上面的列表'tag'中删除l?我尝试了以下方法:

splited = [l.pop() for x in l]

但我只删除了最后一个子列表。知道如何理解这个吗?。

我想获得以下内容:

splitted = l = [["string string...string"],["string....string"],...,["string...string"]]

这可能吗?。

2 个答案:

答案 0 :(得分:4)

使用切片:

splitted = [x[:-1] for x in l]

如果您有大量列表并且内存消耗很重要,只需迭代您的列表并从子列表中删除最后一个元素:

for x in l:
    del x[-1]

更新(如果子列表是真正包含一个字符串元素的列表?):

您可以使用字符串split功能按逗号分隔:

l = [["string string...string, 'tag'"],
     ["string....string, 'tag'"],
     ["string...string, 'tag'"]]
splitted = [[x[0].split(',')[0]] for x in l]

演示:

>>> l = [["string string...string, 'tag'"],["string....string, 'tag'"],["string...string, 'tag'"]]
>>> [[x[0].split(',')[0]] for x in l]
[['string string...string'], ['string....string'], ['string...string']]

答案 1 :(得分:2)

您的问题是pop来自corpusL [corpus.pop() for x in L]中有for x in L: corpus.pop() 个子列表,其实质上转换为:{/ p} >

L

显然,这根本不会修改In [7]: L Out[7]: [[0, 1, 2, 3, 'a'], [0, 1, 2, 3, 'a'], [0, 1, 2, 3, 'a'], [0, 1, 2, 3, 'a'], [0, 1, 2, 3, 'a']] In [8]: L = [s[:-1] for s in L] In [9]: L Out[9]: [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] 。请尝试其中之一:

In [12]: L
Out[12]: 
[[0, 1, 2, 3, 'a'],
 [0, 1, 2, 3, 'a'],
 [0, 1, 2, 3, 'a'],
 [0, 1, 2, 3, 'a'],
 [0, 1, 2, 3, 'a']]

In [13]: [s.pop() for s in L]
Out[13]: ['a', 'a', 'a', 'a', 'a']

In [14]: L
Out[14]: [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

或者:

{{1}}