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,什么是减缩器?好的,我会咬一口。从两个输入值计算输出值的纯函数,第一个输入值类型与函数的返回类型匹配。我的解决方案也不实用。我最喜欢这个,它太简单了!我最喜欢这个,它太简单了!