【问题标题】:Convert Third Element in List of List into int more pythonic将列表列表中的第三个元素转换为 int more pythonic
【发布时间】:2020-07-03 10:08:29
【问题描述】:

我有一个带有名称(姓氏、姓名、年龄)的 csv 文件,我想将所有年龄属性转换为整数。这是一种方式,但我想有一种更 Pythonic 的方式可以做到这一点?我尝试通过列表理解来做到这一点,但它并没有达到我想要的效果。

import csv

with open("names.csv") as names_file:
    head , *names = csv.reader(names_file)
    names = [line for line in names]

for i in range(len(names)):
    names[i][2] = int(names[i][2])

提前致谢。

【问题讨论】:

  • 这里最“unpythonic”的事情是在循环中使用索引。

标签: python python-3.x list list-comprehension


【解决方案1】:

处理此问题的最佳方法:

import pandas as pd
df = pd.read_csv('names.csv')
df["age"] = pd.to_numeric(df["age"])

如果您想要一个列表,请执行以下操作:

list_ = df['age'].to_list()
print(list_)

【讨论】:

    【解决方案2】:
    import csv
    with open("names.csv") as names_file:
        head, *names = csv.reader(names_file)
        names = [[f, l, int(a)] for f, l, a in names]
    

    【讨论】:

      【解决方案3】:

      我愿意:

      names = [['A', 'B', '20'], ['C', 'D', '30'], ['E', 'F', '40']]  # sample data
      for i in names:
          i[2] = int(i[2])
      print(names)
      

      比以下更简洁:

      for i in range(len(names)):
          names[i][2] = int(names[i][2])
      

      如果你必须使用列表理解,那么你可以这样做:

      names = [['A', 'B', '20'], ['C', 'D', '30'], ['E', 'F', '40']]
      names = [[int(j) if inx==2 else j for inx, j in enumerate(i)] for i in names]
      print(names)
      

      输出:

      [['A', 'B', 20], ['C', 'D', 30], ['E', 'F', 40]]
      

      请注意,这种线束嵌套在可读性方面不如上述解决方案可取。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        相关资源
        最近更新 更多