#python #list #loops #integer
#python #Список #циклы #целое число
Вопрос:
У меня есть большой список списков if (это лишь некоторые из верхних строк):
['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)
Я пробовал понимание и объединение списка, но, похоже, вы не можете объединить функцию. Я смог вернуть список только преобразованных значений (целых чисел), но не смог добавить его в первоначальный список.
Комментарии:
1. Похоже, вы на самом деле вставляете int против converting в своем примере. Что это?
2. Итак, вы говорите, что ваша функция работает нормально, вы просто не знаете, как ее использовать, чтобы вернуть список с добавленным целым числом? Если да, то почему бы не поделиться своей попыткой в этом бит?
3. Извините за путаницу. Функция отлично работает для преобразования и вернет соответствующий int римской цифры. Моя проблема заключается в возврате исходного списка с добавлением столбца int. Я пробовал: для строки в lst: map(roman_to_int(строка), список) Также: lst = [[строка [:2] roman_to_int(строка[1]) строка[3:] для строки в совпадениях]]
Ответ №1:
Используйте insert():
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
Комментарии:
1. Спасибо! Я пробовал, но это выдает ошибку ключевого слова…
2. Я преобразовал список списков в фрейм данных и пытаюсь сделать это с помощью apply, но это дает мне ту же ошибку. Функция определена выше, а затем я попробовал ваш цикл for. Возможно, это потому, что функция принимает только строку. Я также пробовал следующее: ` для строки в совпадениях: для элемента в строке [1: 2]: row.insert(2, roman_to_int(elem)) ` Это дает мне ту же ошибку ключа: KeyError: ‘-‘
3. Полная ошибка выглядит следующим образом: KeyError Traceback (последний последний вызов) <ipython-input-13-784bde49923f> в <module> 54 для строки в совпадениях: 55 для элемента в строке[1:2]: —> 56 строка.вставка(2, romano_a_entero(элемент)) 57 58 <ipython-input-13-784bde49923f> в romano_a_entero(r) 37 результат = 0 38 для i,c в enumerate(r): —> 39 если (i 1) == len(r) или diccionario[c] >= diccionario[r[i 1]]: 40 resultado = diccionario[c] 41 else: ошибка ключа: ‘-‘
4. Извините, в моем ответе была ошибка, взгляните на мой отредактированный anser — я изменил
roman_to_int(lst[1])
наroman_to_int(row[1])
это, должен (?) Исправить это для вас.5. Еще раз спасибо! Действительно ценю это. Ключевая ошибка была вызвана некоторыми ошибками, которые произошли ранее, из-за некоторых нечистых данных. Наконец-то я смог ее решить.