我有这个清单:
[('', '', '654', 'Tom', '- Jerry', '', '', ''),
('', '', '', '', '', '756', 'X-Man -', 'Batman'),
('453', 'Hulk - Superman', '', '', '', '', '', '')]
如何删除不需要的(主要是外部)字符,使其保持如下:
[('654', 'Tom' , '- Jerry'),
('756', 'X-man' -', Batman'),
('435','Hulk - Superman')]
这是一个元组,所以我想我不能使用.strip()
方法
感谢。
答案 0 :(得分:5)
使用filter()
;它默认删除`empty'(falsey)值:
[tuple(filter(None, tp)) for tp in inputlist]
演示:
>>> [tuple(filter(None, tp)) for tp in inputlist]
[('654', 'Tom', '- Jerry'), ('756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman')]
答案 1 :(得分:5)
试试这个:
>>> t = [('', '', '654', 'Tom', '- Jerry', '', '', ''),
('', '', '', '', '', '756', 'X-Man -', 'Batman'),
('453', 'Hulk - Superman', '', '', '', '', '', '')]
>>> [tuple(filter(None, i)) for i in t]
[('654', 'Tom', '- Jerry'), ('756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman')]
filter(None, i)
删除False
中的所有i
- ish值,只留下非空字符串。
0
,False
,None
和任何空容器(例如[]
,''
等)都是False
- ish值。
答案 2 :(得分:4)
如果你想摆脱空字符串,我建议使用过滤器:
In [4]: myList = [('', '', '654', 'Tom', '- Jerry', '', '', ''), ('', '', '', '', '', '756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman', '', '', '', '', '', '')]
In [5]: [tuple(itertools.ifilter(None, t)) for t in myList]
Out[5]:
[('654', 'Tom', '- Jerry'),
('756', 'X-Man -', 'Batman'),
('453', 'Hulk - Superman')]
答案 3 :(得分:0)
我在你的列表中尝试了以下代码,它正在运行:
list1 = [('', '', '654', 'Tom', '- Jerry', '', '', ''), ('', '', '', '', '', '756', 'X-Man -', 'Batman'), ('453', 'Hulk - Superman', '', '', '', '', '', '')] ##you can add the elements as you want
tuple2 =()
for i in range(len(list1)):
if type(list1[i]) == tuple:
k = 0
for e in list1[i]:
if not e == ' ' and not e == '':
tuple2 = tuple2 + (e,)
k+=1
list1[i] = tuple2
print list1
它的作用是:
这是我得到的输出:
>>> list1
[('654', 'Tom', '- Jerry'), ('654', 'Tom', '- Jerry', '756', 'X-Man -', 'Batman'), ('654', 'Tom', '- Jerry', '756', 'X-Man -', 'Batman', '453', 'Hulk - Superman')]
答案 4 :(得分:0)
试试这个简短的事情......
lst = [tuple(i for i in tpl if i) for tpl in lst]