将整数转换为英语有序字符串的最pythonic方法?



我对 Python 比较陌生(积极编码 2 个月(,我刚刚编写了一个简单的函数,将整数转换为字符串,并将英文 2 个字符的字符串添加为后缀,传统上表示整数在列表中的顺序。 我快速编写了一些效果很好的东西,但它正在杀死我,因为我只知道有一种更pythonic的方法可以做到这一点。

所以我想要实现的是:

i_to_suffix_str(1) => '1st'
i_to_suffix_str(11) => '11th'
i_to_suffix_str(33) => '33rd'
i_to_suffix_str(142) => '142nd'

。等。

我的代码(感觉既不简洁也不Pythonic(:

def i_to_suffix_str(i):
sig_digits = i % 100
if sig_digits > 3 and sig_digits < 21:
suffix = 'th'
elif (sig_digits % 10) == 1:
suffix = 'st'
elif (sig_digits % 10) == 2:
suffix = 'nd'
elif (sig_digits % 10) == 3:
suffix = 'rd'
else:
suffix = 'th'
return str(i) + suffix

我已经尝过Python的方式,我知道一定有更好的方法。 ...有接受者吗?

也许用字典把它删减一下

lst = [1, 11, 20, 33, 44, 50, 142]
sigs = {1: 'st', 2: 'nd', 3: 'rd'}
for i in lst:
if 3 < i < 21:
print(f'{i}th')
elif int(str(i)[-1]) in sigs.keys():
print(f'{i}{sigs[int(str(i)[-1])]}')
else:
print(f'{i}th')
# 1st 11th 20th 33rd 44th 50th 142nd

您可以使用字典与 Python 三元运算符结合使用,例如:

def i_to_suffix_str(i):
sig_digits = i % 100
suffixes = {1: 'st', 2: 'nd', 3: 'rd'}
suffix = 'th' if 3 < sig_digits < 21 else suffixes.get(sig_digits % 10, 'th')
return str(i) + suffix
print(i_to_suffix_str(1))
print(i_to_suffix_str(11))
print(i_to_suffix_str(33))
print(i_to_suffix_str(142))

输出

1st
11th
33rd
142nd

最新更新