首页 > 解决方案 > 如何一个接一个地找到重复的字符串?

问题描述

最近开始自学Python,一直没能回答这个问题:

"编写一个接收名称列表(作为字符串)的函数。该函数返回列表中连续出现两次且不重复的所有名称的列表。例如,对于列表:["avi", " avi", "beni", "shlomo", "shlomo", "David", "haim", "moshe", "shlomo", "shlomo"] 该函数将返回Avi 和 Shlomo的列表。该函数必须有效在 O (n) 中。”

这是我到目前为止写的,但我没有成功:

def double_names(lst):
    new_lst = []
    for i in lst:
        if lst[i] == lst[i+1]:
            new_lst.append(i)
    return new_lst

print(double_names(["avi", "avi", "beni", "shlomo", "shlomo", "David", "haim", "moshe", "shlomo", "shlomo"]))

标签: pythonlist

解决方案


您的尝试失败,因为:

  1. 并不总是有一个列表元素i+1(您可以zip(lst, lst[1:])改用)。
  2. 您没有考虑到结果中没有名称应该出现两次的事实。你可以为此使用一套。
  3. 您正在迭代列表,同时期望获得索引(您实际上会获得列表项)。(谢谢, 保罗

像这样的东西应该工作:

def double_names(lst):
    new_set = set()
    for first, second in zip(lst, lst[1:]):
        if first == second:
            new_set.add(first)
    return list(new_set)

推荐阅读