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

Python 更改元组列表中元组的第一个值,python,list,tuples,Python,List,Tuples,我有一个元组列表,它的格式是URL,name。有时URL是完整路径,我只需要www.XXXXX.yyy部分,所以我有一个函数,可以拆分URL并只返回该部分 如何修改该列表中的所有第一个值,以获得一个最终的元组列表,该列表的格式为my_functionURL,name 例: 我有以下清单: my_list = [('www.url.com/index.html', 'url'), ('www.website.org/id/1234/photos', '1234 Photos

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

如何修改该列表中的所有第一个值,以获得一个最终的元组列表,该列表的格式为my_functionURL,name

例: 我有以下清单:

my_list = [('www.url.com/index.html', 'url'), 
           ('www.website.org/id/1234/photos', '1234 Photos'), 
           ('www.test.com', 'test')]
我想对所有第一个值应用我的函数,得到下一个最终列表:

>> print my_list
[('www.url.com', 'url'), ('www.website.org', '1234 Photos'), ('www.test.com', 'test')]
由于元组是一种类型,因此不能更改元组的元素/内容

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

试试这个:

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')]
由于元组是一种类型,因此不能更改元组的元素/内容

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

试试这个:

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')]

试着这样做:

my_list2 = []

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

print(my_list2)

试着这样做:

my_list2 = []

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

print(my_list2)
用于获取域以及URL的子域:

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')]
感谢。

用于获取域以及URL的子域:

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')]

感谢。

什么是函数?@JRodDynamite:…我有一个函数,可以拆分URL并只返回该部分…@SiHa-哦,好的。应该把它命名为问题中给出的myFunction。你仍然可以修改你的答案:什么是function?@JRodDynamite:…我有一个函数拆分URL并只返回那部分…@SiHa-好的。应该将其命名为问题中给出的myFunction。您仍然可以更改您的答案:就是它!谢谢你,亚历克斯:我不认为用这种方式处理url是个好主意,除非你100%确定不会有任何带有“https”的url。我想你应该使用urlparse包。@Dexter我在我的函数中使用urlparse,我只是想修改元组列表,没问题;那样的话就好了。否则就是这样-就是这样!谢谢你,亚历克斯:我不认为用这种方式处理url是个好主意,除非你100%确定不会有任何带有“https”的url。我想你应该使用urlparse包。@Dexter我在我的函数中使用urlparse,我只是想修改元组列表,没问题;那样的话就好了。否则是这样的-您应该使用函数,而不是直接将“http”添加到字符串中。使用类似于def netocurl:if not url.startswith'http':url='/'+url返回urlparseurl。这将是未来的证据,如果用户添加了任何带有“https”的url。这也是有效的!谢谢您应该使用函数,而不是直接将“http”添加到字符串中。使用类似于def netocurl:if not url.startswith'http':url='/'+url返回urlparseurl。这将是未来的证据,如果用户添加了任何带有“https”的url。这也是有效的!谢谢这就是我要找的:这就是我要找的: