为什么此功能不能从列表中删除项目?

时间:2015-03-25 21:58:58

标签: python list

我在.py文件中有一个函数来获取链接列表(url字符串)和链接的私有路径列表,并将其从列表中删除并返回一个新列表。

e.g。从列表中删除包含字符串'/ files'的所有项目。

这是清单:

private_paths = ['/sites/', '/files']
url_strings = ['http://example.com/files/image1.jpg', 'http://example.com/index.html', 'http://example.com/about.html', 'http://example.com/sites/js/example.js']
等等..等等。

功能如下:

def rmvPrivate(privatepaths, links):

copy = list(links)

for link in copy:
    for path in privatepaths:
        if path in link:
            # printed link and path here
            copy.remove(link) 
return copy

跟:

rmvPrivate(private_paths, url_strings)

该函数是查找和匹配url_strings列表中包含来自private_paths列表的私有路径的链接,但是它们没有被删除?

提前感谢你给我的任何建议!

上下文: 我正在尝试写一个脚本到一个网站的主页获取所有链接并将它们添加到一个数组 - 然后这个数组将用于python / selenium测试..

再次感谢!

1 个答案:

答案 0 :(得分:0)

你制作了一份清单。如果从副本中删除,则原件永远不会更改。

这样做

private_paths = ['/sites/', '/files/']
url_strings = ['http://example.com/files/image1.jpg', 'http://example.com/index.html', 'http://example.com/about.html', 'http://example.com/sites/js/example.js']

def rmvPrivate(privatepaths, links):
    for link in links:
        for path in privatepaths:
            if path in link:
                # printed link and path here
                links.remove(link) 



rmvPrivate(private_paths, url_strings)

print url_strings

请注意,如果您更改列表,返回值(您从未捕获的)将是多余的。

或者使用原始代码,您可以捕获函数的返回值。

public_url_strings = rmvPrivate(private_paths, url_strings)

作为基于Alex Martellis的一个班轮在链接的欺骗问题中回答。

def rmvPrivate(privatepaths, links):
    links[:] = [link for link in links if all(pp not in link for pp in private_paths)]