Python 确定列表中的任意两个字符串在功能上是否以相同的字符开头
所以基本上,我希望这是错误的: 这是真的,因为每个字符串都以不同的字符开头:Python 确定列表中的任意两个字符串在功能上是否以相同的字符开头,python,python-3.x,Python,Python 3.x,所以基本上,我希望这是错误的: 这是真的,因为每个字符串都以不同的字符开头: ('click', 'bait', 'juice', 'silly') 我得到的最接近的是下面的,但它看起来一点也不好看 functools.reduce(lambda x, y: (y, x[0] != y[0]), map(operator.itemgetter(0), ('click', 'bait', 'carrot', 'juice')))[1] 它失败,因为它只检查相邻的字符串。这将完成以下任务: l=
('click', 'bait', 'juice', 'silly')
我得到的最接近的是下面的,但它看起来一点也不好看
functools.reduce(lambda x, y: (y, x[0] != y[0]), map(operator.itemgetter(0), ('click', 'bait', 'carrot', 'juice')))[1]
它失败,因为它只检查相邻的字符串。这将完成以下任务:
l=('click', 'bait', 'carrot', 'juice')
def f(l):
s=set()
for i in l:
if i[0] in s:
return False
s.add(i[0])
return True
集合s由迄今为止看到的第一个字母组成。在每次迭代中,您移动到下一个单词,并检查第一个字母是否为s。如果存在,则返回False。否则,将第一个字母添加到s并继续。循环的优点是,如果第一个字母提前重复,则停止迭代而不继续。从而避免不必要的工作 这将完成工作:
l=('click', 'bait', 'carrot', 'juice')
def f(l):
s=set()
for i in l:
if i[0] in s:
return False
s.add(i[0])
return True
集合s由迄今为止看到的第一个字母组成。在每次迭代中,您移动到下一个单词,并检查第一个字母是否为s。如果存在,则返回False。否则,将第一个字母添加到s并继续。循环的优点是,如果第一个字母提前重复,则停止迭代而不继续。从而避免不必要的工作 我假设你所说的功能性是指没有状态突变
any(n > 1 for n in collections.Counter(s[0] for s in ('click', 'bait', 'carrot', 'juice')).values())
我想你说的功能是指没有状态突变
any(n > 1 for n in collections.Counter(s[0] for s in ('click', 'bait', 'carrot', 'juice')).values())
它不是严格意义上的函数,但是…?@Tomalak怎么会这样?函数的作用是对输入应用一个减缩器,以得到一个正确或错误的整体结果。@Tomalak,什么是减缩器?好的,我来咬一口。从两个输入值计算输出值的纯函数,第一个输入值类型与函数的返回类型匹配。我的解决方案也不是功能性的。它不是严格的功能性的,尽管…?@Tomalak怎么会这样?功能性是指对输入应用一个减缩器,以得到一个正确或错误的总体结果。@Tomalak,什么是减缩器?好的,我会咬一口。从两个输入值计算输出值的纯函数,第一个输入值类型与函数的返回类型匹配。我的解决方案也不实用。我最喜欢这个,它太简单了!我最喜欢这个,它太简单了!