Учитывая список чисел, замените любое отрицательное число строкой «neg». [1,2-3,4-5,6 ] => [1,2,"-отрицательный",4,"-отрицательный",6]
def swapToNeg(lis):
for i in lis:
if (i < 0):
lis[i] = "neg"
print(lis)
Я продолжаю сталкиваться с двумя типами ошибок, которые я не могу понять. --> 1 - IndexError: индекс назначения списка вне допустимого диапазона --> 2 - TypeError: '<' не поддерживается между экземплярами 'str' и 'int'
Как вы можете изменить число на строку путем доступа к индексу вручную, но не может изменить число на строку, когда вы выполняете итерацию по нему, сравниваете и меняете??? это меня съедает...
Ваш первоначальный список состоит из 4 пунктов: 1, (2-3), (4-5) и 6. Ваш желаемый результат состоит из 6 пунктов. Поскольку математические операции оцениваются python (2-3)=-1, мы не сможем определить, содержит ли термин отрицательное вычитаемое. Таким образом, ваш желаемый результат может быть максимум [1, "-neg", "-neg", 6]






Вы пытаетесь использовать i как индекс списка, так и значение этого индекса в списке. Для цикла for, который вы создали, просто перебирает значения, а не инкрементные индексы.
Вы, вероятно, хотите что-то подобное, когда вы перебираете значения индекса. Вы можете использовать оператор range для перечисления из 0..len(lis)-1
def swapToNeg(lis):
list_length = len(lis)
for i in range(list_length):
if (lis[i] < 0):
lis[i] = "neg"
print(lis)
Спасибо за такой быстрый ответ на такой простой вопрос, лол. Я знал! что метод len() должен был вызываться таким образом, чтобы попытаться сравнить фактическое значение.
Или вы можете перестроить список: lis = [i if i >= 0 else '-neg' for i in lis]
Вы неправильно получаете доступ к списку этот код работает
lis=[1,-2,3]
for i in lis:
if i<0:
lis[lis.index(i)]='neg'
Как работает этот код, если в списке есть другие отрицательные значения, отличные от -2.
Это работает только тогда, когда вы знаете, что ваше единственное отрицательное число равно -2.
Теперь у вас есть итерация по элементам в списке. i устанавливается равным 1, 2-3, 4-5 и т. д. Вы получаете TypeError, потому что, когда i = 2-3, вы меняете 6 на строку "neg". затем, когда i = 4-5, снова осуществляется доступ к последнему элементу списка, но теперь i[-1] = "neg". поскольку «neg» — это строка, ее нельзя сравнивать с целым числом.
есть несколько способов обновить вашу функцию:
range, чтобы i представлял индекс каждого элемента. i начинается с 0 и увеличивается на 1 до тех пор, пока не достигнет длины списка. в цикле for вам нужно будет получить доступ к lis[i], а не просто i.def swapToNeg(lis):
for i in range(len(lis)):
if (lis[i] < 0):
lis[i] = "neg"
print(lis)
enumerate. см. документацию здесь. в приведенном ниже примере el сохранит зацикленный элемент (1,2-3,4-5...), а i сохранит индекс зацикленного элемента (0,1,2...).def swapToNeg(lis):
for el, i in enumerate(lis):
if (el < 0):
lis[i] = "neg"
print(lis)
for i in lisперебирает элементы в списке, а не их индексы.