【问题标题】:Iterating through a list of lists and replacing one specific character遍历列表列表并替换一个特定字符
【发布时间】:2018-09-17 03:22:12
【问题描述】:

所以目前的问题是我有一个列表列表,例如:

info = [['X','X','X','34,0976','1,34542'],['X','X','X','23,9878','32,65354'], ['X','X','X','1,745645','5,76454']]

“X”是我感兴趣的值。但是,我正在尝试将数字中的逗号替换为小数点,因为它们是我需要的纬度和经度数字稍后转换为浮点数。

我目前的解决方案是......好吧,至少可以说是废话,但这是我的初学者尝试:

for lst in defib_info:
    for item in lst:
        for char in item:
            if char == ",":
                char.replace(",",".")

我在每个循环中插入了 print() 语句,以检查它是否输入了必要的次数,但逗号没有被替换。

我确信 python 有一个 WWWAAAAAYYYYY 更简单的方法来做到这一点,所以这将是我的第一个问题,我的第二个问题是为什么我的代码不工作,尽管缺乏性能和美感?是因为我试图修改一个不可变的列表吗?

任何信息都会很棒!谢谢!

【问题讨论】:

  • Python 中的列表(数组)是可变的。

标签: python python-3.x list replace


【解决方案1】:

一个简单的列表推导可以在这里工作:

info = [['X','X','X','34,0976','1,34542'],['X','X','X','23,9878','36,65354'],['X','X','X','1,745645','5,76454']]

info = [[x.replace(',', '.') for x in i] for i in info]
print(info)

输出:

[['X', 'X', 'X', '34.0976', '1.34542'], ['X', 'X', 'X', '23.9878', '36.65354'], ['X', 'X', 'X', '1.745645', '5.76454']]

【讨论】:

  • 谢谢!大约 5 分钟前,我才真正想通了!非常感谢您的意见。现在我不会忘记如何做到这一点。哈哈
【解决方案2】:

由于其他人已经很好地回答了您的第一个问题,这就是您的解决方案不起作用的原因(第二个问题):

for lst in info:
    for i, item in enumerate(lst):
        if item != 'X':                            # 1
            lst[i] = item.replace(',', '.')        # 2
  1. 您没有预料到该案例会忽略“X”
  2. 您没有使用 string.replace 并将其重新分配给 lst[i]i 是索引)

【讨论】:

    【解决方案3】:

    这些都是很好的答案,我只是为了好玩而尝试使用 lambda:

    info = [['X','X','X','34,0976','1,34542'],['X','X','X','23,9878','32,65354'], ['X','X','X','1,745645','5,76454']]
    
    print(list(map(lambda x:list(map(lambda y:y.replace(',','.'),x)),info)))
    

    输出:

    [['X', 'X', 'X', '34.0976', '1.34542'], ['X', 'X', 'X', '23.9878', '32.65354'], ['X', 'X', 'X', '1.745645', '5.76454']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 2019-09-01
      • 2016-03-29
      • 2011-10-28
      • 2015-03-11
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多