如何在列表中的单个条目上使用拆分

时间:2016-11-02 17:00:37

标签: python list url

所以我在网址上有一个python列表(在下面的代码段中称为lst)。

/this/is/the/first/url/file.zip
/this/is/the/second/url/file.zip
...

我想创建另一个只包含每个url的/file.zip部分的列表。到目前为止,我有这个:

lst2 = []
for i in lst:
    lst2.append(i[0].split('/')][-1])

并按预期返回/file.zip部分。但我的问题是如何才能为整个清单做到这一点?

5 个答案:

答案 0 :(得分:3)

假设lst = [url1, url2, ...],您当前的代码非常接近最佳工作状态。

代码lst2.append(i[0].split('/')][-1])的最后一行是问题所在。

通过调用i[0],您实际上是获取i字符串的第一个字符(因为i派生自lst内的字符串),然后根据它分割它在/,这是行不通的。然后,]之后的单独split会出错。

因此,要修复此代码,您可以执行以下操作。

lst2 = []
for i in lst:
    lst2.append(i.split('/')[-1])

然后,打印lst2会给出

  

[' file.zip',' file1.zip',...]

这是您想要的输出。

要解释一下,i in lst正在获取lst列表中的每个项目,这些项目都是字符串。然后,在循环内部,字符串i将根据其中的/进行拆分,从而生成另一个数组。但是你想要该字符串的最后一部分,因此可以使用[-1]访问数组中的最后一项。

答案 1 :(得分:0)

您可以使用列表理解:

lst2 = [url.rsplit('/', 1)[-1] for url in lst]

答案 2 :(得分:0)

您可以使用list comprehension完成此操作。

lst = [
'/this/is/the/url/file.zip',
'/this/is/the/url/file1.zip',
'/this/is/the/url/file2.zip',
'/this/is/the/url/file3.zip',
'/this/is/the/url/file4.zip',
]

lst2 = [l.split('/')[-1] for l in lst]

lst2现在看起来像这样:

['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip']

答案 3 :(得分:0)

除了@Wintro回答:

你需要领先的' /'在你的结果(/file1.zip)?然后你必须再次预先发布它,因为split()会让它消失。

我建议你使用python builtin pathlibos.path.basenameos.path.splithttps://docs.python.org/3/library/pathlib.html https://docs.python.org/2/library/os.path.html#os.path.basename

此外,您可以使用循环理解:

urllst = ["url1/file1.zip", "url2/file2.zip", "..."]
filelst = ['/' + url.split('/')[-1] for url in lst]

答案 4 :(得分:0)

虽然在这种情况下可能没有必要,但为这些功能使用适当的库总是一个好主意。在这种情况下,这是os模块:

>>> import os
>>> [os.path.basename(i) for i in lst]
['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip']