如何比较String列表中的元素并从列表中删除anagram

问题描述 投票:0回答:1

给出一个列表,要求我们删除所有其他字谜,而只保留第一个字谜。例如:

 list1 =["listen", "abc", "lsitne", "silent", "adfig", "bca"]

输出应返回["listen", "abc", adfig"]

我已经有一段时间在研究它了,但是输出与我的期望不符。我不确定我在哪里混蛋。

我尝试的代码:

def check(s1):
    for n in range(0, len(s1)):
        for i in range(n+1, len(s1)-1):
    # the sorted strings are checked  
            if (sorted(s1[n])== sorted(s1[i])): 
                s1.remove(s1[i])
    print(sorted(s1))

check(list1)的输出为['abc', 'adfig', 'bca', 'listen', 'silent']。奇怪的是,它删除了'lsitne',但对列表的其余部分没有执行任何操作。

python python-3.x anagram
1个回答
0
投票

替代解决方案:将每个字符串变成一个集合,并跟踪已经看到的集合。如果两个单词产生相同的集合,则它们必须是字谜。

strings = ["listen", "abc", "lsitne", "silent", "adfig", "bca"]

sets = []

retained_strings = []

for string in strings:
    as_set = set(string)
    if as_set in sets:
        continue
    sets.append(as_set)
    retained_strings.append(string)

print(retained_strings)

输出:

['listen', 'abc', 'adfig']

我确定你可以做这个可爱的人。

© www.soinside.com 2019 - 2024. All rights reserved.