2024-10-01 19:14:37 发布
网友
假设我有两个字符串:
IAMASTRIPETHA-IWANTTOIGN-RE IAMA-TRIPETHATIWA-TTOIGNORE
如果在本例中忽略“-”的位置,那么这两个字符串是相同的。如何在Python2.7中实现这一点?你知道吗
IAMASTRIPETHA-IWANTTOIGN-RE IAMA-TRIPETHATIWA-TTOALGORE
上面的例子在忽略“-”时是不相似的;因此我不在乎。你知道吗
希望有人能帮我;)
PS:很抱歉没有提及这一点,但字符串长度不一定要相等!
从注释中可以看出,您不关心字符串长度是否匹配,因此我们不需要测试长度,并且可以使用内置的zip()而不是导入zip_longest()。你知道吗
zip()
zip_longest()
s1 = 'IAMASTRIPETHA-IWANTTOIGN-RE' s2 = 'IAMA-TRIPETHATIWA-TTOIGNORE' s3 = 'IAMA-TRIPETHATIWA-TTOALGORE' def ignore_dash_match(s1, s2): return all(c1 == c2 for c1, c2 in zip(s1, s2) if c1 != '-' and c2 != '-') print ignore_dash_match(s1, s2), ignore_dash_match(s1, s3)
输出
True False
下面是另一种方法,它将每个'-'转换为一个“通配符”对象,该对象比较起来等于任何东西。你知道吗
'-'
s1 = 'IAMASTRIPETHA-IWANTTOIGN-RE' s2 = 'IAMA-TRIPETHATIWA-TTOIGNORE' s3 = 'IAMA-TRIPETHATIWA-TTOALGORE' class Any: def __eq__(self, other): return True def dash_to_Any(s): return [Any() if c == '-' else c for c in s] print dash_to_Any(s1) == dash_to_Any(s2), dash_to_Any(s1) == dash_to_Any(s3)
您可以通过使用任意一个实例来稍微提高效率,而不是每次都创建一个新实例。但是要得到更好的版本,请看我对Searching for a partial match in a list of tuples的回答。你知道吗
当然,如果你不在乎不匹配的长度,你可以这样做
def ignore_dash_match(s1, s2): return all(c1 == c2 for c1, c2 in zip(dash_to_Any(s1), dash_to_Any(s2)))
a = "IAMASTRIPETHA-IWANTTOIGN-RE" b = "IAMA-TRIPETHATIWA-TTOIGNORE" all(x==y or x=="-" or y=="-" for x, y in zip(a, b)) >> True
我不会为你写一个完整的解决方案,但会指导你。你知道吗
您需要获取两个字符串中“-”的索引,并在每个字符串中相应地替换为空字符串。你知道吗
为了在给定字符串中找到“-”的位置,您可以:
get_indexes(st): return [m.start() for m in re.finditer('-', st)]
现在应该用空字符串替换另一个字符串中的这些索引,并对它们进行比较。你知道吗
这个解决方案是健壮的,不假设任何长度。你知道吗
从注释中可以看出,您不关心字符串长度是否匹配,因此我们不需要测试长度,并且可以使用内置的
zip()
而不是导入zip_longest()
。你知道吗输出
下面是另一种方法,它将每个
'-'
转换为一个“通配符”对象,该对象比较起来等于任何东西。你知道吗输出
您可以通过使用任意一个实例来稍微提高效率,而不是每次都创建一个新实例。但是要得到更好的版本,请看我对Searching for a partial match in a list of tuples的回答。你知道吗
当然,如果你不在乎不匹配的长度,你可以这样做
我不会为你写一个完整的解决方案,但会指导你。你知道吗
您需要获取两个字符串中“-”的索引,并在每个字符串中相应地替换为空字符串。你知道吗
为了在给定字符串中找到“-”的位置,您可以:
现在应该用空字符串替换另一个字符串中的这些索引,并对它们进行比较。你知道吗
这个解决方案是健壮的,不假设任何长度。你知道吗
相关问题 更多 >
编程相关推荐