在Python中对字符串进行排序并测试字符串中的第一个字母

在Python中对字符串进行排序并测试字符串中的第一个字母,python,Python,此代码正在测试字符串的第一个字母-如果是“a”,则返回alpha,否则返回zebra。有没有更好的方法可以做到这一点?明确无误。也许您应该像在注释中指出的那样防止空字符串。例如,您可以使用内置的方法来检查前缀。还有更短的路吗当然可以: def a_letter(string): s = string.lower() if s[0] == 'a': return 'alpha' else: return 'zebra' 或者,使用三元运算符可能更可读: return

此代码正在测试字符串的第一个字母-如果是“a”,则返回
alpha
,否则返回
zebra
。有没有更好的方法可以做到这一点?

明确无误。也许您应该像在注释中指出的那样防止空字符串。例如,您可以使用内置的方法来检查前缀。还有更短的路吗当然可以:

def a_letter(string):
  s = string.lower()
  if s[0] == 'a':
    return 'alpha'
  else:
    return 'zebra'
或者,使用三元运算符可能更可读:

return ('zebra', 'alpha')[s.startswith(('a', 'A'))]

如果你只有两个条件,你可以尝试穷人的东西

它是如何工作的

print(['zebra','alpha'][string[0].lower() =='a'])

因为布尔是int的一个子类,所以
[string.lower()[0]='a']
生成一个整数值,但
['false','true']
将其作为索引值。

我认为这样做的一个好方法是:

True == 1, False == 0

因为它清晰且足够简洁。

要做一个更全面的解决方案,请为每个字母返回一些内容

voc=将北约字母表名称列表转换为字母到名称的dict映射

def语音检查输入是否在dict中,然后返回值,或者?如果它是混乱的

def a_letter(s):
    return 'alpha' if s and s[0].lower() == 'a' else 'zebra'

您没有打印
'alpha'
,而是返回
'alpha'
。您的方式有什么问题?看起来很经典。如果字符串为空怎么办?>有没有更好的方法来实现这一点“更好”对您意味着什么?一个更快、代码更少、可读性更好的解决方案?如果你真的愿意,你可以去掉
else
。它很可爱,但在现实世界中我更喜欢OP的代码。使用slice可以避免索引错误,所以你不能检查字符串是否为空:
如果字符串[0:1]返回'alpha'。lower=='a'else'zebra'
@splash58更好的
字符串[:1]
def a_letter(s):
    return 'alpha' if s and s[0].lower() == 'a' else 'zebra'
voc=dict([[string.lower(x[0]), x] for x in 
['ALFA',
 'BRAVO',
 'CHARLIE',
 'DELTA',
 'ECHO',
 'FOXTROT',
 'GOLF',
 'HOTEL',
 'INDIA',
 'JULIETT',
 'KILO',
 'LIMA',
 'MIKE',
 'NOVEMBER',
 'OSCAR',
 'PAPA',
 'QUEBEC',
 'ROMEO',
 'SIERRA',
 'TANGO',
 'UNIFORM',
 'VICTOR',
 'WHISKEY',
 'XRAY',
 'YANKEE',
 'ZULU']])

def phonetic(letter):
    if letter in voc:
        return voc[letter]
    else:
        return "?"