Как заменить строку на int в списке в python?

#python #python-3.x #string #list #integer

#python #python-3.x #строка #Список #целое число

Вопрос:

В следующем списке я хочу заменить «Солнце» на 0, а «Дождь» на 1. Как я могу это сделать?

 precipitation = ["Sun", "Rain", "Rain", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Rain", "Rain", "Rain", "Rain"]

for i in precipitation:  
  if precipitation[i] == "Sun":
    precipitation[i] = 0
  else:
    precipitation[i] = 1
  

Комментарии:

1. for i in precipitation выдает вам фактические элементы в списке, а не их соответствующие индексы. Самое простое исправление в вашем коде for i in range(len(precipitation)): — это то, что будет i принимать значение индексов. Существуют и более простые решения, но это наиболее точно соответствует тому, что у вас есть сейчас.

2. [0, если x!=»Sun», иначе 1 для x в осадках]

3. Шивам, ты можешь показать свой новый код, который дает тебе все единицы? И, как указывает @TomRon, есть более простые решения.

Ответ №1:

Вы можете сделать это, используя понимание списка:

 precipitation = [0 if x == 'Sun' else 1 for x in precipitation]
  

Комментарии:

1. Я предполагаю, что спрашивающий хочет 0 для ‘Sun’.

2. @JenilDave изменил его. Спасибо!

Ответ №2:

Разработка ответа @Gabip, используя тот факт, что логические значения численно представлены как 0 и 1:

 [int(x=='Sun') for x in precipitation]
  

Ответ №3:

Попробуйте это…

 precipitation = ["Sun", "Rain", "Rain", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Rain", "Rain", "Rain", "Rain"]

for i in range(len(precipitation)):  
  if precipitation[i] == "Sun":
    precipitation[i] = 0
  else:
    precipitation[i] = 1
         
print(precipitation)
  

Ответ №4:

Добавление к уже имеющимся ответам, используя map()

 list(map(lambda x: 0 if x=='Sun' else 1,a))
  

Вы можете попробовать это, чтобы избежать циклов и понимания списка