在Python中,如何通过ascii代码判断另一个字符串的字符串前缀?

在Python中,如何通过ascii代码判断另一个字符串的字符串前缀?,python,string,ascii,prefix,Python,String,Ascii,Prefix,例如,现在我们有了“frei”模式,我们有了一些名称,如“freiburg”、“freicking”、“flensburg”和“freking”。现在我想判断模式是否是这些名称的前缀所有字母都是小写的 有人给出了这样的解决方案: name = ['freiburg', 'freicking', 'flensburg', 'freking'] hit = [] pattern = 'frei' lower = 'frei' upper = 'frei{' for i in name: if

例如,现在我们有了“frei”模式,我们有了一些名称,如“freiburg”、“freicking”、“flensburg”和“freking”。现在我想判断模式是否是这些名称的前缀所有字母都是小写的

有人给出了这样的解决方案:

name = ['freiburg', 'freicking', 'flensburg', 'freking']
hit = []
pattern = 'frei'
lower = 'frei'
upper = 'frei{'
for i in name:
    if lower <= i <= upper:
        hit.append(i)
嗯,我认为这是一种非常狂热的方法。但我不知道它的原理是什么。有人能告诉我为什么上下弦是这样的吗?为什么这里会使用字符“{”?我认为“freiburg”的ascii码的和大于“frei{”,但为什么它实际上仍然小于“frei{”

非常感谢。

我想您可以使用.startswith函数吗

例如:

names = ['freiburg', 'freicking', 'flensburg', 'freking']
hit = []
pattern = 'frei'
for name in names:
    if name.startswith(pattern):
        hit.append(i)

这是通过确保要比较的相应字符的unicode代码位于以下边界之间来实现的:

[ord(i) for i in 'frei']
# [102, 114, 101, 105]

[ord(i) for i in 'frei{']
# [102, 114, 101, 105, 123]
sorted(['fra', 'frei', 'frei{', 'freidja', 'freia', 'from'])
# ['fra', 'frei', 'freia', 'freidja', 'frei{', 'from']
注意{在表中紧跟在z之后:

ord('z')
# 122

ord('{')
# 123
因此,不考虑低于第一个代码序列或大于第二个代码序列的任何内容。如果尝试对字符串序列(包括边界)进行排序,这一点会变得非常清楚:

[ord(i) for i in 'frei']
# [102, 114, 101, 105]

[ord(i) for i in 'frei{']
# [102, 114, 101, 105, 123]
sorted(['fra', 'frei', 'frei{', 'freidja', 'freia', 'from'])
# ['fra', 'frei', 'freia', 'freidja', 'frei{', 'from']
所以基本上,任何以frei开头,后跟其他字母的字符串都会比'frei{'小,因为{比z大

然而,正如蒂埃里在评论中所提到的,这假设要匹配的后续字符将来自拉丁字母表。来自其他字母表的字符代码将位于{之后,而不属于该边界

此外,一种更简单且可能是正确的方法是只使用str类中的startswith,如其名称所示,如果字符串以指定的子字符串开头,则返回布尔值:

[i for i in name if i.startswith('frei')]

这看起来像是一个相当脆弱和复杂的方法来做StartWith的等价物。它基于一个错误的想法,即“{”将在所有字母之后按排序顺序出现。这是错误的。例如,“freißenbüttel”<“frei”{'为假,很多字符也会出现这种情况。是的。我认为所有名称都已转换为拉丁字母。谢谢。谢谢你的回答。这个问题的原始内容是,我们有一个二进制树类来存储有关citiesnode.key=name,node.value=location的大量数据,我们还构建了一个名为lookuplower的方法,在这个类中是较高的。我们需要使用lookuplower,upper这个方法来找出哪些城市的前缀有给定的字符串“frei”。所以我不能使用startwith这个模块。但是谢谢你的回答。我已经找到了。好主意。但是我需要解决一个特殊的问题,所以我仍然在尝试使用upper和lower。