【问题标题】:Converting roman numerals to integers in a list of lists将列表列表中的罗马数字转换为整数
【发布时间】:2021-04-21 13:17:02
【问题描述】:

如果列表(这只是顶部的一些行),我有一个很大的列表:

['001-008  I', 'I', 'Enfermedades infecciosas y parasitarias', 2018, 6.398]
['001-008  I', 'I', 'Enfermedades infecciosas y parasitarias', 2017, 6.819]

并且想应用一个函数,我必须将第二列转换为整数并将其添加到第二列后面,以便输出如下所示(不要介意最后两列):

['001-008 I', 'I', 1, 'Enfermedades infecciosas y parasitarias', 1984, 3232]
['001-008 I', 'I', 1, 'Enfermedades infecciosas y parasitarias', 1992, 16]

我之前写的函数是:

def roman_to_int(r):
    rom_vals = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000} 
    result = 0 
    for i,c in enumerate(r):
        if (i+1) == len(r) or rom_vals[c] >= rom_vals[r[i+1]]: 
            result += rom_vals[c]
        else:
            result -= rom_vals[c]
    return(result)

我已经尝试了列表理解和连接,但您似乎无法连接函数。我能够返回仅包含转换值(整数)的列表,但无法将其添加到初始列表中。

【问题讨论】:

  • 您实际上似乎在您的示例中插入了一个 int 与转换。是哪个?
  • 所以你说你的函数工作正常,你只是不知道如何使用它来返回添加整数的列表?如果是这样,为什么不分享你的尝试呢?
  • 很抱歉给您带来了困惑。该函数可以很好地进行转换,并将返回罗马数字的相应 int。我的问题在于返回添加了 int 列的初始列表。我试过: for row in lst: map(roman_to_int(row), list) 另外: lst = [[row[:2] + roman_to_int(row[1]) + row[3:] for row in matches]]

标签: python list loops integer


【解决方案1】:

使用插入():

lst = [['001-008  I', 'I', 'Enfermedades infecciosas y parasitarias', 2018, 6.398],
       ['001-008  I', 'I', 'Enfermedades infecciosas y parasitarias', 2017, 6.819],
       ...]

for row in lst:
    row.insert(2, roman_to_int(row[1])) # changed here

【讨论】:

  • 谢谢!我试过了,但它给了我一个关键字错误...
  • 我已将列表列表转换为数据框,并尝试使用 apply 来执行此操作,但它给了我同样的错误。 functino 是上面定义的,然后我尝试了你的 for 循环。也许是因为该函数只接受一个字符串。我还尝试了以下方法:` for row in matches: for elem in row[1:2]: row.insert(2, roman_to_int(elem))` 它给了我同样的关键错误:KeyError:'-'
  • 完整错误如下: KeyError Traceback (最近一次调用最后一次) in 54 for row in match: 55 for elem in row[1: 2]: ---> 56 row.insert(2, romano_a_entero(elem)) 57 58 in romano_a_entero(r) 37 resultado = 0 38 for i,c in enumerate(r): ---> 39 if (i+1) == len(r) or diccionario[c] >= diccionario[r[i+1]]: 40 resultado += diccionario[c] 41 else: KeyError: '-'
  • 抱歉,我的回答有误,请查看我编辑的分析器 - 我将 roman_to_int(lst[1]) 更改为 roman_to_int(row[1]) 这应该(?)为您解决。
  • 再次感谢!真的很感激。关键错误是由于之前发生的一些错误,因为一些不干净的数据。最后我能够解决它。
猜你喜欢
  • 2019-01-09
  • 2011-10-25
  • 2012-10-09
  • 1970-01-01
  • 2020-05-11
  • 2021-12-15
  • 2014-10-19
相关资源
最近更新 更多