【问题标题】:Compare items in list with nested for-loop将列表中的项目与嵌套的 for 循环进行比较
【发布时间】:2023-03-05 13:58:01
【问题描述】:

我有一个按字母顺序排列的开放 CSV 中的 URL 列表,现在我想遍历列表并检查重复的 URL。在第二步中,应从列表中删除重复项,但我目前卡在检查部分,我试图用嵌套的 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 循环有什么问题?

非常感谢:)

【问题讨论】:

  • 缩进。如果某些内容与您的循环不在同一级别,则它不在循环内。
  • 另外,first_url = i 的意义何在?
  • 就此而言,second_url = s?

标签: python for-loop nested


【解决方案1】:

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

更好的解决方案是调用set(short_urls) 以获取您的网址的set,并删除重复项。如果您想要删除重复的网址的list(而不是set),您可以使用list(set(short_urls)) 将set 转换回list。

换句话说:

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

【讨论】:

  • 我已经尝试过你的第一个建议;它导致循环无限运行。你会怎么称呼set(short_urls)?不确定我是否完全理解它。
  • 如果short_urls 是list,您可以直接执行set(short_urls),您将得到原始list 的set。 set 是一个没有重复的集合。
【解决方案2】:
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 的元素进行比较,这显然是相同的。 您需要做的是在第一个 for 到达之后的位置开始第二个 for。

【讨论】:

  • 查看我对上一个答案的评论:由于某种原因,这样做会导致无限循环。
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多