给出一个列表,要求我们删除所有其他字谜,而只保留第一个字谜。例如:
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'
,但对列表的其余部分没有执行任何操作。
替代解决方案:将每个字符串变成一个集合,并跟踪已经看到的集合。如果两个单词产生相同的集合,则它们必须是字谜。
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']
我确定你可以做这个可爱的人。