使用嵌套的for循环比较列表中的项目

时间:2014-05-21 20:49:45

标签: python for-loop nested

我有一个打开的CSV列表,我按字母顺序排序,现在我想遍历列表并检查重复的网址。在第二步中,然后应该从列表中删除副本,但我目前停留在我尝试使用嵌套for循环解决的检查部分,如下所示:

for i in short_urls:
    first_url = i
    for s in short_urls:
        second_url = s
    if i == s:
       print "duplicate"
    else:
       print "all good"

一旦嵌套的for循环工作,print语句显然会被替换。目前,该列表包含一些重复项,但我的嵌套循环似乎无法正常工作,因为它无法识别任何重复项。

我的问题是:有没有更好的方法来执行此练习,以及当前嵌套的for循环有什么问题?

非常感谢:)

2 个答案:

答案 0 :(得分:2)

通过构造,即使正确缩进if/else块,您的方法也会出错。例如,想象一下,如果为了论证而将[1, 2, 3]设为short_urls。外部for循环将选择1以与列表进行比较。它会认为它在内部for循环中遇到第一个元素1时发现重复。基本上,每个元素都会被标记为重复,如果您打算删除重复项,您最终会得到一个空列表。

更好的解决方案是致电set(short_urls)以获取您的网址set并删除重复项。如果您想要删除重复项的list(而非set)个网址,则可以将set转换回listlist(set(short_urls))

换句话说:

short_urls = ['google.com', 'twitter.com', 'google.com']
duplicates_removed_list = list(set(short_urls))
print duplicates_removed_list # Prints ['google.com', 'twitter.com']

答案 1 :(得分:0)

if i == s:

不在第二个for循环中。你错过了缩进

for i in short_urls:
    first_url = i
    for s in short_urls:
        second_url = s
        if i == s:
           print "duplicate"
        else:
           print "all good"

编辑:您还要将数组的每个元素与同一数组的每个元素进行比较。这意味着将位置0处的元素与位置0处的元素进行比较,这显然是相同的。 你需要做的是在第一个到达之后的位置开始第二个。