Цикл Nested For and Try - основной цикл не решается - PullRequest
0 голосов
/ 22 февраля 2019

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

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

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

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

Воткод с явным определением строки, выводящий [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)

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

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

1 Ответ

0 голосов
/ 22 февраля 2019

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

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)
...