ili*_*ard 3 python tuples list
我有一个元组列表,如下所示:
>>>myList
[(), (), ('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
Run Code Online (Sandbox Code Playgroud)
我想这样读:
>>>myList
[('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
Run Code Online (Sandbox Code Playgroud)
即我想()从列表中删除空元组.在这样做时我想保留元组('',).我似乎无法找到从列表中删除这些空元组的方法.
我已经尝试myList.remove(())并使用for循环来执行此操作,但要么不起作用,要么我的语法错误.任何帮助,将不胜感激.
您可以过滤"空"值:
filter(None, myList)
Run Code Online (Sandbox Code Playgroud)
或者你可以使用列表理解.在Python 3上,filter()返回一个生成器; list comprehension在Python 2或3上返回一个列表:
[t for t in myList if t]
Run Code Online (Sandbox Code Playgroud)
如果您的列表包含的不仅仅是元组,您可以显式测试空元组:
[t for t in myList if t != ()]
Run Code Online (Sandbox Code Playgroud)
Python 2演示:
>>> myList = [(), (), ('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
>>> filter(None, myList)
[('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
>>> [t for t in myList if t]
[('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
>>> [t for t in myList if t != ()]
[('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
Run Code Online (Sandbox Code Playgroud)
在这些选项中,filter()功能最快:
>>> timeit.timeit('filter(None, myList)', 'from __main__ import myList')
0.637274980545044
>>> timeit.timeit('[t for t in myList if t]', 'from __main__ import myList')
1.243359088897705
>>> timeit.timeit('[t for t in myList if t != ()]', 'from __main__ import myList')
1.4746298789978027
Run Code Online (Sandbox Code Playgroud)
在Python 3上,坚持使用列表理解:
>>> timeit.timeit('list(filter(None, myList))', 'from __main__ import myList')
1.5365421772003174
>>> timeit.timeit('[t for t in myList if t]', 'from __main__ import myList')
1.29734206199646
Run Code Online (Sandbox Code Playgroud)