【问题标题】:Type cast certain values in a nested list类型转换嵌套列表中的某些值
【发布时间】:2021-06-14 18:19:30
【问题描述】:

我有一个嵌套的字符串列表:

station_data = [['65.29', 3003', 'station1'], ['81.23', '8000', 'station2'], ['77.33', '3500', 'station3']] 等等...

我正在尝试将每个列表的第一个位置 [0] 从字符串类型转换为浮点数

我正在尝试将每个子列表的第二个位置 [1] 从字符串类型转换为 int

我尝试过不同的 for 循环,但在我的一生中,我似乎无法正确使用语法

可以修改station_data,或者可以创建一个新列表,无论哪种方式都可以。

所需的输出应如下所示: station_data_processed = [[65.29, 3003, 'station1'], [81.23, 8000, 'station2'], [77.33, 3500, 'station3']]

任何建议都会有很大帮助,谢谢!

【问题讨论】:

  • 请提供预期的minimal, reproducible example (MRE)。我们应该能够复制并粘贴您的代码的连续块,执行该文件,并重现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和所需的输出来测试我们的建议。
  • 简而言之,我们很乐意修复一个问题的代码。我们不是编码服务。按照指定发布您的代码,让我们更正您的错误。
  • [[float(x), int(y), z] for [x, y, z] in station_data] 虽然这不处理无法强制数据的情况。您需要根据所需的输出自行计算出那个
  • station_data = [[float(elem[0]), int(elem[1]), elem[2]] for elem in station_data]

标签: python list for-loop nested


【解决方案1】:

你可以做一个列表理解:

converted_list = [[float(i[0]), int(i[1]), i[2]] for i in station_data]

【讨论】:

  • 太好了,效果很好。我几乎没有列表推导的经验,但这给了我一个很好的例子来开始更多地整合它们。
  • 请记住,这种假设输入数据永远不会坏。如果每个元素的最终类型真的很重要,您可能希望实现某种形式的错误处理。
  • 这是一个糟糕的答案。硬编码,从长远来看不会帮助其他人。我不知道为什么人们对这个帖子的答案投了 3 次。
  • 因为它准确地回答了这个问题:如何对嵌套的字符串列表进行类型转换。它可以很容易地推广到其他用例。
  • 想象一个用户在一个嵌套列表中有十万个元素。他们的寿命不够长,无法为其他所有元素编写 float(I[0])
【解决方案2】:

你可以使用try/except

station_data = [['65.29', '3003', 'station1'], ['81.23', '8000', 'station2'], ['77.33', '3500', 'station3']]
l = []
for lst in station_data:
    group = []
    for val in lst:
        try:
            val = int(val)
        except ValueError:
            try:
                val = float(val)
            except ValueError:
                pass
        group.append(val)
    l.append(group)

输出

[[65.29, 3003, 'station1'], [81.23, 8000, 'station2'], [77.33, 3500, 'station3']]

【讨论】:

  • 我不确定这个。如果输入错误,您的方法会隐藏错误,而不是让用户知道有问题。
  • 比硬编码的答案更好。最好提供更持久的选择。您提供的答案适用于 OP 的案例,并且仅适用于 OP 的案例。通常,在 SO 上发布答案时,您希望避免只使用硬编码的答案,因为它们不会帮助未来的用户完成那里的任务。
  • 究竟如何将元素转换为未知类型是一个持久的解决方案?
  • 让我告诉你,这比硬编码一个答案好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2017-10-24
  • 1970-01-01
  • 2016-04-19
  • 2012-06-03
  • 2015-06-12
相关资源
最近更新 更多