Python中将字符串转换为整数

3
我将尝试将Python中的字符串列表转换为整数,代码如下:
plain = input("string >> ")
string_list = list(plain)
print(string_list)
ASCII = []

for x in range (0, len(string_list)):
    ASCII.append([ord(string_list[x])])

print(ASCII)

for x in range (0, len(ASCII)):
    print(ASCII[x])
    integer_ASCII = type(int(ASCII[x]))
    print(integer_ASCII, end=", ")

但是我遇到了这个错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

那么,有没有其他的方法将字符串转换为整数。


plain 只是用户输入的字符串,例如 "test"。 - shubhanshu-tomar
打印(string_list)的结果是什么? - Sivaram Rasathurai
测试 - shubhanshu-tomar
1
@shubhanshu-tomar,你可以使用 ord('your_letter') - Avishka Dambawinna
哦,你使用了它,你需要从ASCII中删除[]。.append([ord(string_list[x])]) - Avishka Dambawinna 9分钟前 @AvishkaDambawinna是的,完全正确!! - shubhanshu-tomar
显示剩余6条评论
5个回答

2
这能解决您的错误吗?
string_list = list("test")
print(string_list)
ASCII = []

for x in range(0, len(string_list)):
    ASCII.append([ord(string_list[x])])

print(ASCII)

integer_ASCII = []
str_integer_ASCII = []

for x in range(0, len(ASCII)):
    integer_ASCII.append(int(ASCII[x][0]))
    str_integer_ASCII.append(str(ASCII[x][0]))

print("\n")
print("INT LIST VERSION:", integer_ASCII, type(integer_ASCII))
print("STRING LIST VERSION:", str_integer_ASCII, type(str_integer_ASCII))
print("FULL STRING VERSION: ", ' '.join(str_integer_ASCII), type(' '.join(str_integer_ASCII)))


希望这些信息对您有所帮助!
祝编码愉快。

所以基本上你想要一个像这样的列表,[116, 101, 115, 116],对吧? - Aryan
我可以对列表进行算术运算吗?因为我需要使用RSA加密字符串。 - shubhanshu-tomar
好的,这是一个整数列表,因此可以进行加密。我不是任何加密专家,但依据我的看法,一个整数列表应该被加密。那么我是否应该编辑帖子,以使结果为[116, 101, 115, 116] - Aryan
由于它将列表从 ['116', '101', '115', '116'] 转换为 [116, 101, 115, 116],是否可以删除 "[ ]",因为应用程序之后我需要将所有内容转换回字符串。 - shubhanshu-tomar
1
当然,@shubhanshu-tomar,就像这样-首先通过将ASCII代码的字符串值附加到后面来创建integer_ASCII变量的str版本,然后将它们连接在一起,如下所示-str_integer_ASCII.append(str(ASCII[x][0])),然后要获取它们的字符串版本,使用' '.join(str_integer_ASCII) - Aryan
显示剩余4条评论

2

与其使用ASCII值,你正在将列表追加到ASCII中。 首先,我们将每个字符串字符映射到ASCII值并将其转换为字符串类型。然后使用join函数连接。

e = 100
n = 20
text = input("string >>>")
#This will return int ascii values for each character. Here you can do any arithmatic operations
rsa_values = list(map(lambda x:(ord(x)**e) % n , text))#[16, 1, 5, 16]


#TO get the same you can list compression also
rsa_values = [ (ord(x)**e) % n for x in text] #[16, 1, 5, 16]



#if you need to join them as string then use join function.
string_ascii_values = "".join(chr(i) for i in ascii_values)#'\x10\x01\x05\x10'

Update

(ord(x)**e) % n

is

pow(ord(x), e, n)

rsa_values = [ pow(ord(x), e, n) for x in text] #[16, 1, 5, 16]

这显然去掉了括号并给出了输出,但我如何对单个ASCII值执行算术运算? - shubhanshu-tomar
e和n的值是随机生成的,我会分享它们的生成方式,请参见https://github.com/theEndurance-del/security。 - shubhanshu-tomar
1
(ord(x)**e) % n 对于列表中的每个元素进行此操作,使用列表推导或映射函数都是有效的。 - Sivaram Rasathurai
1
https://dev59.com/4nVC5IYBdhLWcg3wykej - Sivaram Rasathurai
1
在进行(a**b)%m计算时,最好使用pow的三个参数版本pow(a,b,m),因为它执行模幂运算,这是一种更有效的计算方式。 - Copperfield
显示剩余9条评论

1

只需使用列表推导式将列表中的每个字符串转换为整数:

list_of_ints = [int(x) for x in string_list]

如果你想获取字符串中每个字符的char值(这就是从 input() 获取的值 -- 不需要在其上调用 list()):

list_of_char_values = [ord(x) for x in string]

1

很简单,这也是可能的。请了解有关理解Python的内容。

>>> [ord(x) for x in 'abcde']
[97, 98, 99, 100, 101]

1
当您执行ord()时,它将是int类型,您无需再进行类型转换。 - Sivaram Rasathurai

-1

这对我来说似乎有效,你有一个列表,里面包含每个数字的列表。

plain = 'test'
string_list = list(plain)
print(string_list)
ASCII = []

for x in range (0, len(string_list)):
    ASCII.append([ord(string_list[x])])

print(ASCII)

for x in range (0, len(ASCII)):
    print(ASCII[x])
    integer_ASCII = type(int(ASCII[x][0]))
    print(integer_ASCII, end=", ")

请不要多次发布相同的答案,我已经发布了完全相同的解决方案。 - Aryan
我没有给@rcvaram投反对票,他显然是在抄袭我的帖子! - Aryan
你的帖子在我发布之前没有加载。 - dachil1pil1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接