gpt4 book ai didi

python - 在字符串列表中查找唯一字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:26 27 4
gpt4 key购买 nike

我已经设法解决了 this来自 codewars 的练习使用以下代码的网站

def find_uniq(arr):
diff = None
first = None
for s in arr:
if first is None:
first = s
continue

if (len(first) in [0, 1]) and (len(s) in [0, 1]):
if arr.count(first) == 1:
return first
elif arr.count(s) == 1:
return s

temp = set(first.lower()).difference(set(s.lower()))
if temp:
diff = s

if diff is not None:
temp = set(diff.lower()).difference(set(s.lower()))
return first if temp else diff

我的代码通过了他们所有的单元测试,但问题是当我尝试使用以下自定义单元测试时,它失败了

test.assert_equals(['foo', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba dab'], 'foo')  # fails, returns 'abc'

练习如下:

有一个字符串数组/列表。除了一个以外,所有字符串都包含相似的字母。试着找到它!

规则是:

  • 字符串可以包含空格。空格并不重要,只有非空格符号才重要。例如。仅包含空格的字符串就像空字符串。

  • 保证array/list包含3个以上的字符串。

有关如何改进以处理此类情况的任何建议,甚至只是整体功能的一般改进。

谢谢。

最佳答案

在循环中调用 list.count 方法效率很低。您可以改为使用 dict 来跟踪您到目前为止迭代过的唯一字符集。使字符集减去空格作为字典的键,字符串本身作为值。如果当前键已经在字典中,那么您就会知道该键不是唯一的。然后任务就变成了找到与这个公共(public) key 不同的 key 。如果字典中已经有不同的键,则返回该不同键的值。如果不是,请继续迭代,直到获得与已知公用 key 不同的 key :

def find_uniq(arr):
seen = {}
common = None
for string in arr:
key = frozenset(set(string.lower()).difference(' '))
if key in seen:
common = key
if common is not None:
if key != common:
return string
if len(seen) > 1:
del seen[common]
return next(iter(seen.values()))
seen[key] = string

所以下面的表达式都是True:

find_uniq(['foo', 'abc', 'acb ']) == 'foo'
find_uniq(['abbc', 'foo', 'acb ']) == 'foo'
find_uniq(['abc', 'acb ', 'foo']) == 'foo'

关于python - 在字符串列表中查找唯一字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com