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

python3 returns unsupported operand when bit shifting an element in a list?

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

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

这会导致错误:

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

虽然下面的代码可以按我喜欢的方式工作,但是 returns 一个 int

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

我的问题是如何让第一个代码示例运行?

我知道列表返回的是字符串而不是整数。我试图将 str 类型强制转换为十六进制类型,但这导致了错误。然后我尝试从字符串类型转换为 int 到 hex,并收到 str 到 int 类型转换的错误。

我需要将结果存储为列表中的十六进制,因此将列表更改为整数对我来说不起作用。

您可以使用

将十六进制字符串转换为整数
    int(hex(10), base=16)

但那只会 return 10.

如果你有一个整数列表,我会先将它们移动你需要移动的数量,然后使用 hex 将它们转换为十六进制字符串。十六进制的值和它的整数是相同的,例如0xa == 10True。但是 hex(10) return 是一个字符串。

所以

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

或类似的东西。

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

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

    print(x)
    print(y)