2017-07-30 29 views
1

所以基本上,我想这是False确定是否在列表中的任何两个字符串具有相同字符开始功能

('click', 'bait', 'carrot', 'juice') 

而且这是True,因为每串用不同的字符比开始其他人:

('click', 'bait', 'juice', 'silly') 

我得到的最接近的是以下,但它看起来不太好。

functools.reduce(lambda x, y: (y, x[0] != y[0]), map(operator.itemgetter(0), ('click', 'bait', 'carrot', 'juice')))[1] 

它失败了,因为它只检查彼此相邻的字符串。

回答

3
data = ('click', 'bait', 'carrot', 'juice') 

len(set(w[0] for w in data)) == len(data) 
# -> False 
+0

我最喜欢这个,它非常简单! – bjd2385

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并继续。该循环的优点是,如果第一个字母提前重复,则停止迭代并不继续。从而避免不必要的工作

2

我按功能假设你的意思是没有状态变异。

any(n > 1 for n in collections.Counter(s[0] for s in ('click', 'bait', 'carrot', 'juice')).values()) 
+0

该做的伎俩! – bjd2385

+0

尽管......并不严格“功能性”......? – Tomalak

+0

@Tomalak是怎么回事? –

相关问题