【问题标题】:Not able to cast str to int in a python list [duplicate]无法在 python 列表中将字符串转换为 int [重复]
【发布时间】:2019-10-23 21:52:40
【问题描述】:

我想在列表中转换元素(字符串到整数) 找不到我的错误是什么。我只是得到字符串。 其他一些帖子答案建议使用列表推导,但是,作为一个新手,我更喜欢在学习列表推导之前了解为什么这种更基本的方法不起作用。

感谢您的帮助。

(使用 Python 3)

我试过了:

while True:
    userInput=input("Write space-separated numbers:  ")
    listNumbers=userInput.split()
    for i in listNumbers:
        int(i)
    print(type(listNumbers[0]))

也试过了:

for i in listNumbers:
    i=int(i)

我希望 type(listNumbers[0]) 或任何索引号返回整数 但输出仍然是一个字符串。

【问题讨论】:

  • 你没有改变 listnumbers 中的项目,只是迭代它,每次都改变 i

标签: python list casting


【解决方案1】:

你必须这样做:

for i in range(0, len(listNumbers)):
    listNumbers[i] = int(listNumbers[i])

或:

for idx, val in enumerate(listNumbers):
    listNumbers[idx] = value

这可以使用以下方式缩短:

listNumbers = [int(x) for x in listNumbers]

做的时候:

for i in listNumbers):
    i = int(i)

i 只是对元素的引用,因此您无法更改列表的原始值。

做的时候:

for i in listNumbers:
    int(i)

您不存储int(i) 的结果。

【讨论】:

  • 我知道我没有单独对 int(i) 做任何事情,但是对于 i=int(i),我更难以理解,因为它似乎是铸造和保持的自然方式int 属性就像记忆在 i 变量中一样。我将按照建议使用元素索引。贝当克特!
【解决方案2】:

问题在于您没有将整数存储在循环中!

做:

mylist = []
for i in listNumbers:
    mylist.append(int(i))

最好的解决办法是

listNumbers = list(map(int, listNumbers))

【讨论】:

  • 喜欢这个,因为它可能是最短的方法,并且仍在使用 for 循环。谢谢!
【解决方案3】:

int(i) 不会将列表中的元素 i 转换为整数,您需要将 int(i) 显式分配回列表中的元素才能发生这种情况

while True:

    userInput=input("Write space-separated numbers:  ")
    listNumbers=userInput.split()

    #Iterate over the list and get index and element of list
    for idx, i in enumerate(listNumbers):
        #Cast string to int and assign back to list
        listNumbers[idx] = int(i)

    #Get the type
    print(type(listNumbers[0]))

输出将是

Write space-separated numbers:  1 3 5
<class 'int'>

【讨论】:

  • 很好解释。谢谢!
  • 不用担心@lljorgero 如果答案对您有帮助,请考虑为答案投票:)
  • 我做了,但仍然不算数,因为我没有 15 个代表。积分呢。
【解决方案4】:

您需要将修改后的值实际保存回列表中

for i,val in enumerate(my_list):
    my_list[i] = int(val)

但如前所述,最好只使用列表理解

new_list = [int(val) for val in my_list]

【讨论】:

    【解决方案5】:

    您的第一个变体没有做任何事情,因为转换值只是被丢弃了。

    您的第二个变体确实将值分配给 i,但这不会更改存储在列表中的值。

    我建议改用列表推导:

    while True:
        userInput=input("Write space-separated numbers:  ")
        listNumbers=[int(i) for i in userInput.split()]
        print(type(listNumbers[0]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2013-06-11
      • 2019-01-15
      • 2020-04-22
      相关资源
      最近更新 更多