【问题标题】:Converting numbers in a String list to a int in Python将字符串列表中的数字转换为 Python 中的 int
【发布时间】:2021-03-21 20:30:45
【问题描述】:

如何转换此列表... list = ['1', 'hello', 'bob', '2', '第三个', '3', '0']

到这个列表.. list = [1, 'hello', 'bob', 2, '第三个', 3, 'N/A']

列表 = [1, 2, 3, 'N/A']

基本上我将数据抓取到一个列表中,我需要该列表中的数字,并且我需要将所有零转换为 N/A。我尝试循环遍历列表并替换它,但我得到了不同的类型错误。

for i in list:
    if int(list[i]) == 0:
        call_list[i] = 'N/A'

TypeError: 列表索引必须是整数或切片,而不是 str

如果有人可以提供帮助,那就太棒了。谢谢

【问题讨论】:

  • 您的意思是:if i == '0':
  • 不要调用列表list
  • 哈哈哈谢谢 Samwise 我想过这个问题,但我想明确表示这是一个列表。

标签: python python-3.x list


【解决方案1】:

我怀疑您的主要问题是您不知道 str.isdigit() 存在,它测试字符串是否代表数字(即您可以将其转换为数字而无需点击 ValueError

此外,如果您想遍历列表中的索引,您必须使用for i in range(len(your_list)),而不是for element in your_list。 Python 使用 for-each 循环,与 C 等语言不同,内置函数 range() 只会生成从 0 到其参数的数字列表(在本例中为 len(your_list) ) 您可以对其进行迭代并用作索引。

lst = ['1', 'hello', 'bob', '2', 'third', '3', '0']

for i in range(len(lst)):
    if lst[i].isdigit():
        lst[i] = int(lst[i])
        if lst[i] == 0:
            lst[i] = 'N/A'

print(lst)

【讨论】:

  • 谢谢你,你是 100% 正确我不知道 isdigit()。当我实现它时,它工作得很好。非常感谢!!
【解决方案2】:

一个简单的方法是定义一个函数来说明你想对每个项目做什么:

def convert(item):
    try:
        return int(item) or 'N/A'
    except ValueError:
        return None  # or the original item?

然后使用该函数构建您的新列表:

>>> data = ['1', 'hello', 'bob', '2', 'third', '3', '0']
>>> [convert(d) for d in data if convert(d) is not None]
[1, 2, 3, 'N/A']

注意,如果把函数的最后一行改成return item,可以保留不转换成int的项目的原始版本:

>>> def convert(item):
...     try:
...         return int(item) or 'N/A'
...     except ValueError:
...         return item
...
>>> [convert(d) for d in data]
[1, 'hello', 'bob', 2, 'third', 3, 'N/A']

【讨论】:

  • 谢谢你!我还没有实现它,但我会尝试一下。这看起来也是一个绝妙的解决方案,因为我可以通过函数运行列表。这将非常有效。
【解决方案3】:

您需要一个自定义转换函数来处理您的特定要求,然后将其用于列表理解。

mylist = ['1', 'hello', 'bob', '2', 'third', '3', '0']

def convert(text: str):
  try:
      i = int(text)
  except (TypeError, ValueError):
      return text
  return "N/A" if i==0 else i

new_list = [convert(x) for x in mylist]
new_list2 = [x for x in new_list if isinstance(x, int) or x=='N/A']

【讨论】:

    【解决方案4】:

    使用列表推导来检查项目是否为数字而非零 如果是,则将其转换为 int, 否则它检查它是否为零 并将其转换为“N/A” 最后保持其他一切完好无损

    l =['1', 'hello', 'bob', '2', 'third', '3', '0']
    print ([int(item) if item.isdigit() and item != '0' else 'N/A' if item == '0' else item for item in l])
    

    输出: [1, 'hello', 'bob', 2, 'third', 3, 'N/A']

    或以更易读的形式相同

    print ([
            int(item) if item.isdigit() and item != '0' 
            else 'N/A' if item == '0' 
            else item 
            for item in l
    ])
    

    【讨论】:

    • 关闭,但不处理 'N/A'!
    • 固定处理不适用
    猜你喜欢
    • 2021-09-22
    • 2018-04-08
    • 2021-02-26
    • 2021-12-18
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2021-12-04
    • 2016-04-14
    相关资源
    最近更新 更多