我有以下列表:
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"]]
这可能吗?。
答案 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
来自corpus
,L
[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}}