#python
Вопрос:
Ниже приведена функция, которую я пытаюсь определить, однако безуспешно. Я могу использовать встроенные модули python, чтобы завершить это.
def clean_data(data: List[List[str]]) -gt; None: """Modify data so that the applicable string values are converted to their appropriate type. The indexes of the string values that are converted, and their corresponding type, are: - COLUMN_RIDING is an int - COLUMN_VOTER is an int - COLUMN_RANK is a list of strings - COLUMN_RANGE is a list of integers - COLUMN_APPROVAL is a list of booleans gt;gt;gt; row = ['0', '1', 'NDP;Liberal;Green;CPC', '1;4;2;3', 'NO;YES;NO;NO'] gt;gt;gt; clean_data([row]) gt;gt;gt; row == SAMPLE_DATA_1[0] True gt;gt;gt; row = ['117', '12', 'Liberal;CPC;NDP;Green', '4;0;5;0', 'YES;NO;YES;NO'] gt;gt;gt; clean_data([row]) gt;gt;gt; row == [117, 12, ['CPC', 'GREEN', 'LIBERAL', 'NDP'], [4, 0, 5, 0], [True, False, True, False] True """ clean = [] for i in range(len(data)): if COLUMN_RIDING[i] == str: clean.append( return clean
Комментарии:
1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.
Ответ №1:
Основываясь на вашем примере:
gt;gt;gt; row = ['117', '12', 'Liberal;CPC;NDP;Green', '4;0;5;0', 'YES;NO;YES;NO'] gt;gt;gt; clean_data([row]) gt;gt;gt; row == [117, 12, ['CPC', 'GREEN', 'LIBERAL', 'NDP'], [4, 0, 5, 0], [True, False, True, False]
У вас есть правильное представление о циклическом просмотре данных.
Похоже, что COLUMN_RANK, COLUMN_RANGE и COLUMN_APPROVAL являются списками, разделенными знаком»;». Поэтому, если мы найдем «;» в строке, мы должны разделить строку и повторить ее. Когда мы выполняем итерацию, мы должны определить, является ли это либо целым числом, ДА/НЕТ для логического значения, либо в противном случае это строка.
Если это COLUMN_RIDING или COLUMN_VOTER, просто добавьте целое число
def clean_data(data): clean = [] for column in data: if ";" in column: tmp = [] for value in column.split(";"): if value.isdigit(): #'4;0;5;0' tmp.append(int(value)) elif value == "YES": tmp.append(bool(value)) elif value == "NO": tmp.append(False) else: #['CPC', 'GREEN', 'LIBERAL', 'NDP'] tmp.append(value.upper()) clean.append(tmp) else: clean.append(int(column)) return clean