Почему мой элемент списка вызывается как str по сравнению с другим int в цикле for? - PullRequest
0 голосов
/ 20 января 2019

У меня есть текстовый источник, который состоит из 3 чисел (с максимальным значением 30) и ввода в конце каждой строки. Моя цель состоит в том, чтобы превратить этот исходный файл в список (2-мерный массив) в python, а затем определить, каково минимальное значение первого числа из первого числа любой строки.

Преобразование исходного файла до сих пор выглядит следующим образом:

list=[]
f=open("tavok.txt")
for sor in f:
    if sor[-1]=='\n':sor = sor[:-1]
    sor = sor.split()
    sor = [int(x) for x in sor]
    list.append(sor)
print(list)

Это дает нам список со списками внутри с 3 элементами, каждый из которых является целым числом. Затем я пытаюсь сравнить первый элемент каждого списка внутри, если он меньше текущего минимума. (100 - это просто значение, превышающее предел 30 чисел)

minimum=100
for x in list:
    if int(list[x][0])< minimum:
        minimum = list[x][0]
print (minimum)

Это дает мне это сообщение об ошибке:

"if int (list [x] [0])

Я новичок в программировании и не могу понять, почему мои значения конвертируются обратно в str из int, поэтому программа не может их сравнить и выдает мне это сообщение об ошибке. Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Я должен отметить, что использование list в качестве имени переменной - плохая идея, так как это ключевое слово языка Python. Вы не можете использовать функцию list, после того как вы используете list в качестве имени переменной.

Если вы хотите минимальное значение в описанной ситуации, рассмотрите следующий пример:

data = [[9,3,4],[1,9,7],[4,1,2]]
minimum = min([i[0] for i in data])
print(minimum) #prints 1

Использует понимание списка для получения первого элемента каждого подсписка и встроенную функцию min. Обратите внимание, что это позволяет избежать магического числа (100 в вашем примере).

0 голосов
/ 20 января 2019

Переменная x - это список, поэтому его нельзя использовать для индексации другого списка.

if int(x[0])< minimum

Это должно работать.

...