【问题标题】:Python 2.7: Format a list within a list using for loopsPython 2.7:使用 for 循环格式化列表中的列表
【发布时间】:2018-05-08 00:50:10
【问题描述】:

输入:

data = [['A', 'B', 'C'], ['001', 'ddd', 'eee', '10'], ['002', 'fff', 'ggg', '20']]

预期输出:

data = ['A', 'B', 'C'], [1, 'ddd', 'eee', 10], [2, 'fff', 'ggg', 20]]
  • 将具有数值的列从字符串转换为整数(删除了数字周围的引号

我已尝试使用以下代码,但出现此错误:

ValueError:无法将字符串转换为浮点数:A

谁能指出我的错误?

formatted = []
for row in data:
    new_row = []
    for i, col in enumerate(row):
        if i != [1,2]:
            new_row.append(col)
            new_row.append(float(col))
    formatted.append(new_row)

print formatted

【问题讨论】:

  • 列表中是否可以包含多个元素而没有逗号?
  • “删除每个列表后的逗号”?您要问的内容没有这种数据类型。
  • “谁能指出我的错误” - 我们可以指出什么,could not convert string to float 还没有指出???
  • @goodvibration 好的,那我想我会编辑帖子以删除第一个条件

标签: python python-2.7


【解决方案1】:

您可以尝试使用 json 和 regex,如下所示:

import json, re

data = [['A', 'B', 'C'], ['001', 'ddd', 'eee', '10'], ['002', 'fff', 'ggg', '20']]
data = json.dumps(data)
data = json.loads(re.sub(r'"0*(\d+)"', r'\1', data)

print (data)

输出:

[['A', 'B', 'C'], [1, 'ddd', 'eee', 10], [2, 'fff', 'ggg', 20]]

您还提到您想在每个列表后删除逗号,这是一种方法:

data = reduce(lambda oldList, newList: oldList + newList, data, [])

输出:

['A', 'B', 'C', 1, 'ddd', 'eee', 10, 2, 'fff', 'ggg', 20]

【讨论】:

    【解决方案2】:

    您可以使用 map 应用带有条件的 lambda 函数:

    for i,d in enumerate(data):
        data[i] = map(lambda x: float(x) if x.isdigit() else x, d)
    

    map 将 lambda 函数应用于 d 的每个子元素。如果元素是代表数字的字符串,则使用float 应用转换,如果不是,则保留整个字符串。它直接替换数据中的子列表。

    在 Python 3.X 中,map 的结果需要显式转换为列表,即data[i] = list(map())

    【讨论】:

      【解决方案3】:

      你的变量i,一个整数,永远不会等于[1,2],一个列表。 你想说/写的是:

      if i not in [1,2]:

      编辑: 我忘记了第一排。 由于您的第一行与其他行不同,请以不同方式处理(不推荐),或使用其他答案之一(推荐)

      【讨论】:

      • 他可能是这个意思,但我不认为它修复了他的代码!
      【解决方案4】:

      “pythonic”的方法是尝试将每个元素转换为整数,并在失败时回退到保留字符串。

      formatted = []
      for row in data:
          new_row = []
          for elem in row:
              try:
                  new_row.append(int(elem))
              except ValueError:
                  new_row.append(elem)
          formatted.append(new_row)
      
      print formatted
      

      【讨论】:

        【解决方案5】:

        这个呢:

        def to_float(s):
            try:
                return float(s)
            except:
                return s
        
        [[to_float(s) for s in row] for row in data]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-19
          • 2021-05-03
          • 2014-02-22
          • 2015-05-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多