python3在对列表中的元素进行位移时返回不支持的操作数?

问题描述 投票:0回答:1

我有一个十六进制值的列表,我需要将每个元素移位9,然后将结果与另一个列表合并。 我在下面提供了一个我尝试的例子。

x = [hex(10), hex(11)]
y = x[0] << 1

结果出现了一个错误。

TypeError: unsupported operand type(s) for <<: 'str' and 'int'.

虽然下面的代码和我一样工作,但返回的是一个 int

x = [0xa, 0xb]
y = x[0] << 1

我的问题是,如何才能让第一个代码示例工作?

我知道列表返回的是一个字符串而不是一个int。 我试着输入从字符串到十六进制的转换,但这导致了一个错误。 然后我又尝试将字符串转为int再转为hex,结果在str转int的过程中出现了错误。

我需要将结果以十六进制的形式存储在列表中,因此将列表改为整数对我来说是行不通的。

python-3.x list hex bit-shift
1个回答
1
投票

你可以使用以下方法将十六进制字符串转换为整数。

    int(hex(10), base=16)

但这只会返回10。

如果你有一个整数列表,我会先将它们移位到你需要移位的数量,然后使用 hex. 十六进制和其整数的值是一样的,例如 0xa == 10True. 但是... hex(10) 返回一个字符串。

所以

    nums = [10, 11, ...]
    nums = [x << 9 for x in nums]
    hex_nums = map(hex, nums)

或类似的东西。


1
投票

最好的方法是使用基数为16的构造函数'int'将十六进制值转换为整数,然后使用位元运算符

    a=hex(10)
    b=hex(11)
    x = [int(a,16),int(b,16)]
    y = x[0] << 1

    print(x)
    print(y)
© www.soinside.com 2019 - 2024. All rights reserved.