#python #python-3.x #list
Вопрос:
Как мне преобразовать этот список… список = [‘1’, ‘привет’, ‘боб’, ‘2’, ‘третий’, ‘3’, ‘0’]
К этому списку.. список = [1, «привет», «боб», 2, «третий», 3, «Н/Д»]
или
список = [1, 2, 3, ‘N/A’]
В основном я соскабливаю данные в список, и мне нужно число из этого списка, и мне нужно преобразовать все нули в N/A. Я попытался просмотреть список и заменить его, и я получаю ошибки другого типа.
for i in list:
if int(list[i]) == 0:
call_list[i] = 'N/A'
Ошибка типа: индексы списка должны быть целыми числами или срезами, а не str
Если бы кто-нибудь мог помочь, это было бы потрясающе. Спасибо
Комментарии:
1. Вы имели в виду:
if i == '0':
?2. Не называйте список
list
!3. Ха-ха — ха, Спасибо, Сэм, я думал об этом, но я хотел дать понять, что это был список.
Ответ №1:
Я подозреваю, что ваша главная проблема здесь в том, что вы не знаете, что str.isdigit()
это существует, что проверяет, представляет ли строка число (т. Е. Вы можете преобразовать ее в число, не нажимая a ValueError
.
Кроме того, если вы хотите выполнить итерацию по индексам в списке, вам нужно сделать for i in range(len(your_list))
это вместо for element in your_list
. Python использует циклы для каждого, в отличие от языков, таких как C, и встроенная функция range()
просто создаст список чисел от 0 до любого его аргумента (в данном случае len(your_list)
), который вы можете перебирать и использовать в качестве индексов.
lst = ['1', 'hello', 'bob', '2', 'third', '3', '0']
for i in range(len(lst)):
if lst[i].isdigit():
lst[i] = int(lst[i])
if lst[i] == 0:
lst[i] = 'N/A'
print(lst)
Комментарии:
1. Спасибо вам за это, и вы на 100% правы, я не знал об isdigit(). Когда я это реализовал, это прекрасно сработало. Большое вам спасибо!!
Ответ №2:
Простой подход состоит в том, чтобы определить функцию, которая говорит, что вы хотите сделать с каждым элементом:
def convert(item):
try:
return int(item) or 'N/A'
except ValueError:
return None # or the original item?
а затем используйте эту функцию для создания своего нового списка:
>>> data = ['1', 'hello', 'bob', '2', 'third', '3', '0']
>>> [convert(d) for d in data if convert(d) is not None]
[1, 2, 3, 'N/A']
Обратите внимание , что если вы измените последнюю строку функции на return item
, вы можете сохранить исходные версии элементов, которые не преобразуются в int:
>>> def convert(item):
... try:
... return int(item) or 'N/A'
... except ValueError:
... return item
...
>>> [convert(d) for d in data]
[1, 'hello', 'bob', 2, 'third', 3, 'N/A']
Комментарии:
1. Спасибо вам за это!! Я еще не реализовал его, но собираюсь попробовать. Это также выглядит как блестящее решение, потому что я могу просто запускать списки через функцию. это было бы очень эффективно.
Ответ №3:
Вам нужна пользовательская функция преобразования, которая может соответствовать вашим конкретным требованиям, а затем использовать ее для понимания списка.
mylist = ['1', 'hello', 'bob', '2', 'third', '3', '0']
def convert(text: str):
try:
i = int(text)
except (TypeError, ValueError):
return text
return "N/A" if i==0 else i
new_list = [convert(x) for x in mylist]
new_list2 = [x for x in new_list if isinstance(x, int) or x=='N/A']
Ответ №4:
используя понимание списка, которое проверяет, является ли элемент цифрой, но не нулем, если это так, оно преобразует его в int, в противном случае оно проверяет, равен ли он нулю, и преобразует его в «N/A», и, наконец, сохраняет все остальное нетронутым
l =['1', 'hello', 'bob', '2', 'third', '3', '0']
print ([int(item) if item.isdigit() and item != '0' else 'N/A' if item == '0' else item for item in l])
выходы:
[1, 'hello', 'bob', 2, 'third', 3, 'N/A']
или то же самое в немного более читаемой форме
print ([
int(item) if item.isdigit() and item != '0'
else 'N/A' if item == '0'
else item
for item in l
])
Комментарии:
1. близко, но не справляется
'N/A'
!2. исправлена обработка N/A