更改元组列表中元组的第一个值

时间:2017-02-20 08:05:57

标签: python list tuples

我有一个格式为(URL, name)的元组列表。有时URL是完整路径,我只想要www.XXXXX.yyy部分,所以我有一个分割URL并只返回该部分的函数。

如何修改该列表中的所有第一个值,以获得具有此格式(my_function(URL), name)的元组的最终列表。

例: 我有这个清单:

my_list = [('www.url.com/index.html', 'url'), 
           ('www.website.org/id/1234/photos', '1234 Photos'), 
           ('www.test.com', 'test')]

我想将my_function()应用于所有第一个值,获取下一个最终列表:

>> print my_list
[('www.url.com', 'url'), ('www.website.org', '1234 Photos'), ('www.test.com', 'test')]

4 个答案:

答案 0 :(得分:5)

由于tupleimmutable类型,因此您无法更改元组的元素/内容。

对于您的情况,您可以做的是生成包含新元组的列表。

试试这个:

my_list = [('www.url.com/index.html', 'url'), 
           ('www.website.org/id/1234/photos', '1234 Photos'), 
           ('www.test.com', 'test')]

f = lambda x: x.split('/')[0] 
my_list = [(f(url),name) for url, name in my_list]
print(my_list)

输出:

[('www.url.com', 'url'), ('www.website.org', '1234 Photos'), ('www.test.com', 'test')]

答案 1 :(得分:3)

使用urlparse获取网址的域名(以及子域名):

from urlparse import urlparse

def netloc_parse(url):
    if not url.startswith('http'): 
        url = '//' + url 
    return urlparse(url).netloc

print [(netloc_parse(i[0]), i[1]) for i in my_list]

它的输出是:

[('www.url.com', 'url'), ('www.website.org', '1234 Photos'), ('www.test.com', 'test')]

感谢@Dextersuggestion

答案 2 :(得分:2)

def myfunction(strings):    
    return strings.split('/')[0]

output = [(myfunction(url), text) for url, text in my_list]

答案 3 :(得分:0)

尝试这样的事情:

my_list2 = []

for item in my_list:
    my_list2.append((my_function(item[0]), item[1]))

print(my_list2)