我有一个打开的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循环有什么问题?
非常感谢:)
答案 0 :(得分:2)
通过构造,即使正确缩进if/else
块,您的方法也会出错。例如,想象一下,如果为了论证而将[1, 2, 3]
设为short_urls
。外部for
循环将选择1
以与列表进行比较。它会认为它在内部for
循环中遇到第一个元素1
时发现重复。基本上,每个元素都会被标记为重复,如果您打算删除重复项,您最终会得到一个空列表。
更好的解决方案是致电set(short_urls)
以获取您的网址set
并删除重复项。如果您想要删除重复项的list
(而非set
)个网址,则可以将set
转换回list
并list(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处的元素进行比较,这显然是相同的。 你需要做的是在第一个到达之后的位置开始第二个。