我有一个函数,可以用来逐个字符比较两个字符串,并对其执行一些其他任务。我想对其进行修改以比较十六进制数字。
例如:如果要比较A = "hello"
,B = "himan"
。我曾经运行过for
循环并逐个字符地进行比较。效果很好。
for x, y in zip(A, B):
if x == y:
do something
如何修改它以考虑十六进制数字。例如,如果A = "30303867"
和B = "3f160303"
,我想先将30
与3f
匹配,然后依此类推。通常,我只能将3
与3
进行匹配,依此类推。
谢谢
答案 0 :(得分:0)
要获取Python中整数的十六进制数字作为字符串,可以使用'{:x}'.format(number)
。格式说明符中的:x
表示十六进制格式(无0x)。
然后,您可以将字符串代码与十六进制表示形式一起使用。
(旁注:这也可以使用printf样式的格式%x
)
答案 1 :(得分:0)
由于您不想转换为整数,因此最简单的操作是一次遍历每个字符串两次。
for i in range(0, min(len(A),len(B)), 2):
if A[i:i+2] == B[i:i+2]:
# Do Something
答案 2 :(得分:0)
如果我对您的理解正确,那么您有两个字符串import pandas as pd, numpy as np
df = pd.DataFrame({'x': [1, 2, np.nan, np.nan],
'y': [np.nan, np.nan, 4, 8]})
arr = df.values
df['xy'] = arr[~np.isnan(arr)].astype(int)
print(df)
x y xy
0 1.0 NaN 1
1 2.0 NaN 2
2 NaN 4.0 4
3 NaN 8.0 8
和A
,但是您不想将这些字符串解释为字符,而是一对十六进制数字。但不考虑这些数字的整数值。这相当于比较字符对,因为它们是十六进制数字,所以您需要进行不区分大小写的比较,因为当被视为十六进制值时,1F和1f相等。
这会将您的字符串拆分为成对的字符:
B
然后您可以
def digit_pairs(s):
return [s[i:i+2].lower() for i in range(0,len(s),2)]
不过,我不明白您反对转换为整数。您是否知道Python中的整数可以任意大?