在Python中返回特定的列表项
我有一个列表,其中包含几个文本文件的名称,如下所示:在Python中返回特定的列表项,python,string,list,Python,String,List,我有一个列表,其中包含几个文本文件的名称,如下所示: ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"] 我如何检查并返回列表中以“order\”或任何其他给定序列开头的这些元素 In [92]: L = ["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"] In [93]: answer = [] I
["catfile.txt", "order_2014_11_11_11", "santa.txt", "order_2013_10_20"]
我如何检查并返回列表中以“order\”或任何其他给定序列开头的这些元素
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']
作为一项功能:
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']
说明:
列表理解通常类似于:
[somefunction(x) for x in data if some_condition]
在我们的例子中,我们只想从数据中选择项,而不是操纵它们。因此,不需要somefunction
,表达式简化为:
[x for x in data if some_condition]
在我们的例子中,条件是字符串以顺序开始。Python有一个方便的字符串方法来测试这一点。很自然地,它被称为startswith
。因此,最终形式是:
[ x for x in data if x.startswith('order_')]
如果需要,可以使用类似的string方法来测试字符串的结尾。例如:
>>> [ x for x in data if x.endswith('txt')]
['catfile.txt', 'santa.txt']
说明:
列表理解通常类似于:
[somefunction(x) for x in data if some_condition]
在我们的例子中,我们只想从数据中选择项,而不是操纵它们。因此,不需要somefunction
,表达式简化为:
[x for x in data if some_condition]
在我们的例子中,条件是字符串以顺序开始。Python有一个方便的字符串方法来测试这一点。很自然地,它被称为startswith
。因此,最终形式是:
[ x for x in data if x.startswith('order_')]
如果需要,可以使用类似的string方法来测试字符串的结尾。例如:
>>> [ x for x in data if x.endswith('txt')]
['catfile.txt', 'santa.txt']
您可以使用以下选项来筛选列表:
您甚至可以使用[:]
将此操作设置为就地操作:
>>> 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']
>>>
您可以使用以下选项来筛选列表:
您甚至可以使用[:]
将此操作设置为就地操作:
>>> 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']
>>>
请尝试以下代码:
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']
请尝试以下代码:
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']
哦,哇,我犯了个愚蠢的错误,谢谢,修正了。我想知道为什么会出现反对票。提交时间几乎相同,但你最初的回答完全不同。您在
中使用了,而不是.startswith()
在原始答案中,该更新后来才出现。是的,我意识到我误读了问题,所以我修复了我的答案。有什么问题吗?噢,哇,我犯了个愚蠢的错误,谢谢,修正了。我想知道为什么会出现反对票。提交时间几乎相同,但你最初的回答完全不同。您在
中使用了,而不是.startswith()
在原始答案中,该更新后来才出现。是的,我意识到我误读了问题,所以我修复了我的答案。有什么问题吗?