在Python中返回特定列表项

时间:2014-10-21 21:44:28

标签: python string list

我有一个列表,其中包含几个文本文件的名称,如下所示:

["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]    

如何检查并返回列表中的这些元素,以" order _"开头。或任何其他给定的序列?

5 个答案:

答案 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)]