我有一个列表,其中包含几个文本文件的名称,如下所示:
["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
如何检查并返回列表中的这些元素,以" order _"开头。或任何其他给定的序列?
答案 0 :(得分:5)
>>> data = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
>>> [ x for x in data if x.startswith('order_')]
['order_2014_11_11_11', 'order_2013_10_20']
列表理解通常类似于:
[somefunction(x) for x in data if some_condition]
在我们的例子中,我们只想从数据中选择项目,而不是操纵它们。因此,不需要somefunction
,表达式简化为:
[x for x in data if some_condition]
在我们的例子中,条件是字符串以order_
开头。 Python有一个方便的字符串方法来测试它。它自然被称为startswith
。所以,最终形式是:
[ x for x in data if x.startswith('order_')]
如果您需要它,可以使用类似的字符串方法来测试字符串的结尾。例如:
>>> [ x for x in data if x.endswith('txt')]
['catfile.txt', 'santa.txt']
答案 1 :(得分:1)
您可以使用list comprehension来使用str.startswith
过滤列表:
>>> lst = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
>>> [x for x in lst if x.startswith('order_')]
['order_2014_11_11_11', 'order_2013_10_20']
>>>
您甚至可以使用[:]
:
>>> lst = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
>>> lst[:] = [x for x in lst if x.startswith('order_')]
>>> lst
['order_2014_11_11_11', 'order_2013_10_20']
>>>
最后,应该注意str.startswith
允许您指定要搜索的前缀元组:
>>> lst = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
>>> [x for x in lst if x.startswith(('order_', 'cat'))]
['catfile.txt', 'order_2014_11_11_11', 'order_2013_10_20']
>>>
答案 2 :(得分:0)
In [92]: L = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
In [93]: answer = []
In [94]: for elem in L:
....: if elem.startswith("order_"):
....: answer.append(elem)
....:
In [95]: answer
Out[95]: ['order_2014_11_11_11', 'order_2013_10_20']
作为一项功能:
In [96]: def returnOrders(L):
....: answer = []
....: for elem in L:
....: if elem.startswith("order_"):
....: answer.append(elem)
....: return answer
....:
In [97]: L
Out[97]: ['catfile.txt', 'order_2014_11_11_11', 'santa.txt', 'order_2013_10_20']
In [98]: returnOrders(L)
Out[98]: ['order_2014_11_11_11', 'order_2013_10_20']
更一般地说:
In [99]: def returnStarters(L, prefix):
....: answer = []
....: for elem in L:
....: if elem.startswith(prefix):
....: answer.append(elem)
....: return answer
....:
In [100]: L
Out[100]: ['catfile.txt', 'order_2014_11_11_11', 'santa.txt', 'order_2013_10_20']
In [101]: returnStarters(L, "order_")
Out[101]: ['order_2014_11_11_11', 'order_2013_10_20']
答案 3 :(得分:0)
试试这段代码:
l1 = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
l2 = []
for i in l1:
if i.startswith("order"):
l2.append(i)
样品和输出
print l1
['catfile.txt', 'order_2014_11_11_11', 'santa.txt', 'order_2013_10_20']
print l2
['order_2014_11_11_11', 'order_2013_10_20']
答案 4 :(得分:-2)
seq = "order_"
results = [item for item in list if item.startswith(seq)]