Вложенный цикл For и Try - основной цикл не решает

Мои данные — это список списков с r строками различной длины, содержащими строки данных, некоторые из которых являются числами с плавающей запятой, но были прочитаны как строки.

Я хотел бы сначала пройтись по всем строкам, затем по всем элементам, а затем применить функцию try/except к указанным элементам, чтобы найти первый экземпляр строки в строке. который может быть преобразован в число с плавающей запятой.

Мой код выводит, как и ожидалось, когда я явно указываю второму циклу, для какой строки он должен выполнять операцию, однако, когда я пытаюсь перебрать все строки, он выводит ожидаемый результат только для первой строки и ни одной из следующих строк.

Ожидаемый выходной список float_index (при длине = len(data)) будет списком с индексом первого преобразуемого элемента для всех строк.

Вот код с явным выводом определения строки [2], так как для второй строки это 2-й элемент, который преобразуется в число с плавающей запятой:

data = [['Mittl.', 'Halleninnenpegel,', 'Volllast', 'Li', '124', '132', '132', '132', '139', '138', '141', '139', '131', '146'],
['Abgaskamin', 'LW', '130', '129', '121', '104', '100', '96', '94', '89', '86', '108']]


row= 1
floats = []
float_index = []
for i in data[row]:
    try:
        floats.append(str(int(float(i))))
        float_index = [data[row].index(floats[0])]
    except:
        pass
print(float_index)

Вот код, зацикливающий все строки данных, но выводящий ожидаемое значение только для первой строки float_index = [4], в то время как ожидаемое значение было float_index = [4,2]:

data = [['Mittl.', 'Halleninnenpegel,', 'Volllast', 'Li', '124', '132', '132', '132', '139', '138', '141', '139', '131', '146'],
['Abgaskamin', 'LW', '130', '129', '121', '104', '100', '96', '94', '89', '86', '108']]

floats = []
float_index = []
for r in range(len(data)):
    for i in data[r]:
        try:  
            floats.append(str(int(float(i))))
            float_index = [data[r].index(floats[0])]
        except:
            pass
print(float_index)

Список floats, вероятно, является проблемой - он просто собирает все конвертируемые элементы в длинный список с одной строкой - мне нужно, чтобы список floats был таким же, как data, что он помещает все конвертируемые элементы в новые строки, так что с помощью floats[0] я нахожу первые элементы для всех строк, но почему-то не могу понять, как добиться это.

Буду признателен за помощь, спасибо!


person Skadam    schedule 22.02.2019    source источник
comment
Привет и добро пожаловать в ТАК. Не работает — это совершенно бесполезное описание проблемы, а ваш фрагмент кода не является надлежащим MCVE (stackoverflow.com/help/mcve), поэтому, даже если бы мы попытались, мы не смогли бы воспроизвести проблему самостоятельно. Пожалуйста, отредактируйте свой пост (НЕ публикуйте в комментариях), чтобы добавить истинный MCVE (см. ссылку выше) и правильное описание проблемы (если результат неверен, объясните, как и почему, если вы получите сообщение об ошибке, отправьте точное сообщение об ошибке и полная трассировка).   -  person bruno desthuilliers    schedule 22.02.2019
comment
@Skadam как определяются данные?   -  person Rachel Gallen    schedule 22.02.2019
comment
@RachelGallen Я только что обновил сообщение - извините, это мой первый вопрос, заданный на SO.   -  person Skadam    schedule 22.02.2019
comment
@RachelGallen Я снова обновил, теперь есть две строки данных   -  person Skadam    schedule 22.02.2019
comment
@RachelGallen снова обновлен, теперь он должен работать! :)   -  person Skadam    schedule 22.02.2019
comment
@Skadam, я не знаю, почему вы приняли неверный ответ, но я разместил для вас ответ ниже.   -  person Rachel Gallen    schedule 22.02.2019


Ответы (1)


Не нужно перебирать каждый элемент, просто выйдите из цикла, как только будет найден первый:

data = [['Mittl.', 'Halleninnenpegel,', 'Volllast', 'Li', '124', '132', '132', '132', '139', '138', '141', '139', '131', '146'],
['Abgaskamin', 'LW', '130', '129', '121', '104', '100', '96', '94', '89', '86', '108']]

floats = []
float_index = []
for lest in data:
    float_temp = None
    float_ind_temp = None
    for el in lest:
        try:
            float_temp = str(int(float(el)))
            floats.append(float_temp)
            float_index_temp = lest.index(float_temp)
            break
        except:
            pass
    float_index.append(float_index_temp)
print(float_index)
person TheSoma300    schedule 22.02.2019
comment
пожалуйста, НЕ публикуйте такой совершенно неправильный пример обработки исключений, это одна из худших вещей, которые вы можете сделать (см. realpython.com/the-most-diabolical-python-antipattern) - person bruno desthuilliers; 22.02.2019
comment
Не могли бы вы предоставить решение, пожалуйста? - person Skadam; 22.02.2019