У меня есть задача, которая должна быть прямой. У меня очень большой файл данных, из которого я хочу извлечь только определенные данные. То, что я хочу сделать в начале, - это прочитать в двух столбцах, назовите их массой и snapnum, разделите первый элемент массой пополам, затем перейдите к остальной части списка, и если будет найден этот номер mass/2
, добавьте, что новый список, а также соответствующий элемент в списке snapnum.Создание списка после предварительной операции над каждым элементом списка сепататов
Мой тест данных выглядит следующим образом:
///HEADER
1000 400
100 50
200 300
800 400
50 25
100 300
500 100
400 200
Результаты I планирующим являются
500 100
50 25
100 300
400 200
Моя попытка на код
MASS = []
MASS2 = []
SNAPNUM = []
for line in nlines: #Loop Strips empty lines as well as replaces tabs with space
if line !='':
line = line.strip()
line = line.replace('\t',' ')
columns = line.split()
snapnum = columns[1]
mass = float(columns[0])
mass2 = mass/2.;print(mass/2) #divide element in mass by half.
if mass == mass2:
MASS2.append(mass2)
SNAPNUM.append(snapnum)
continue
print(MASS2)
print(SNAPNUM)
Результаты я получаю
500.0
50.0
100.0
400.0
25.0
50.0
250.0
200.0
[]
[]
Кажется, что списки MASS2 и SNAPNUM не добавляются. Если я изменю условие на if mass <= mass2
, я получаю список, но результаты не те, что я хочу сверху. Кажется, что код просто прокручивается и делит весь список одновременно, а не на разделение одного элемента за раз. Спасибо за помощь.
'if mass == mass2' эффективно эквивалентно' if mass == mass/2.0'. Поэтому мне не очень удивительно, что ваши списки пустые. Потому что 500 не равен 250, 50 не равно 25, 100 не равно 50 ... и т. Д. – Kevin
Кроме того, это ваш фактический отступ? Один пробел перед 'для строки в nlines:' и нулевые пробелы перед 'if line! = '':'? Похоже, что это должно произойти с «IndentationError». – Kevin
Отступы отбрасываются в копии и вставляются. – Surfcast23