Как я могу извлечь целые числа из списка строк, чтобы создать формулу? - PullRequest
0 голосов
/ 26 февраля 2020
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']

Как взять минуты и секунды из этого списка? Я хочу создать формулу для расчета миль в час.

Ответы [ 5 ]

0 голосов
/ 28 февраля 2020

Обновление:

Я - полный новичок в python, если это не ясно.

Я хотел бы использовать понимание списка и сохранить все мои методы и задания в одном линия, но это мешало мне понять. Мой окончательный код прошел шаг за шагом через процесс. Возможно, это не самый эффективный способ, но я смог это выяснить.

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

distanceList = [0.04, 0.05, 0.91, 0.16, 18]
timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']


zipList = zip(distanceList, timeList)
for i in zipList:
    distance = i[0]
    time = i[1]
    numbers = time.split("m:")
    minute = numbers[0]
    sec = numbers[1].strip("s")
    hoursmin = (float(minute) / 60)
    hourssec = (float(sec) / 3600)
    hours = (hoursmin + hourssec)
    mph = (distance / hours)
    print("Distance: ", distance, "Time: ", time, "Speed: ", round(mph, 2), "miles/hr")

вывод:

('Distance: ', 0.04, 'Time: ', '7m:13s', 'Speed: ', 0.33, 'miles/hr')
('Distance: ', 0.05, 'Time: ', '11m:29s', 'Speed: ', 0.26, 'miles/hr')
('Distance: ', 0.91, 'Time: ', '16m:48s', 'Speed: ', 3.25, 'miles/hr')
('Distance: ', 0.16, 'Time: ', '3m:26s', 'Speed: ', 2.8, 'miles/hr')
('Distance: ', 18, 'Time: ', '120m:0s', 'Speed: ', 9.0, 'miles/hr')
0 голосов
/ 26 февраля 2020

Удалить m и s из каждого элемента, затем разделить на :.

timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']

for item in timeList:
    minutes, seconds = item.replace('m', '').replace('s', '').split(':')
    minutes, seconds = int(minutes), int(seconds)
    print(minutes, seconds)

Вывод:

7 13
11 29
16 48
3 26
120 0
0 голосов
/ 26 февраля 2020

Решение

Вы можете нарезать две части, используя str('7m:13s').split(':'), а затем обрабатывать минуты и секунды отдельно, как показано ниже.

json библиотека позволяет делать отступы при печати по словарю и делает чтение более удобным.

Однако вы также можете использовать pandas.DataFrame для отображения результата в виде таблицы.

Поскольку вы упомянули о расчете скорости, позвольте мне сделать несколько фиктивных данных для пройденного расстояния (в милях) и использовать его для расчета скорости (в милях / часах).

distances = ['0.5', '1.2', '3.8', '10.0', '100.0']

Приведенное ниже решение рассчитывает время в часах и также оценивает скорость.

Код

import json
import pandas as pd

timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']

# dummy data for distance (in miles)
distances = ['0.5', '1.2', '3.8', '10.0', '100.0']

# We will save the time-spans in a
# dictionary post-processing
time_spans = dict()

for i, (ts, distance) in enumerate(zip(timeList, distances)):
    tmin, tsec = ts.split(':')
    time_spans.update({i: {'distance': float(distance),
                           'timespan': ts,
                           'minutes': int(tmin[:-1]),
                           'seconds': int(tsec[:-1]),
                           }})
# Print the dictionary (uncomment if necessary)
#print(json.dumps(time_spans, indent=2))

# Print DataFrame: As a table
df = pd.DataFrame(time_spans).T
# Calculate elapsed time (in hours)
df['time'] = df['minutes']/60 + df['seconds']/(60*60)
# Calculate speed: distance/time (in miles/hour)
df['speed'] = df['distance']/df['time']

print(df)

Pandas DataFrame :

  distance timespan minutes seconds       time    speed
0      0.5   7m:13s       7      13   0.120278  4.15704
1      1.2  11m:29s      11      29   0.191389  6.26996
2      3.8  16m:48s      16      48       0.28  13.5714
3       10   3m:26s       3      26  0.0572222  174.757
4      100  120m:0s     120       0          2       50
0 голосов
/ 26 февраля 2020

Если вы хотите вычислить скорость на основе времени, вам понадобится расстояние. Если вы хотите, чтобы это было в милях в часах, вам нужно преобразовать это время в число (или долю) часов. это может быть сделано в понимании списка:

timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']

# converting to hours
hours = [(m*60+s)/3600 for ms in timeList for m,s in [map(int,ms[:-1].split("m:"))]]

#computing speeds:
distance = 1 # mile
mph      = [distance/time for time in hours]

print(mph)

# [8.314087759815243, 5.2249637155297535, 3.571428571428571, 17.475728155339805, 0.5]

если ваши расстояния находятся в списке соответствия, вы можете получить скорость для каждой записи, используя zip:

miles = [ 10, 5, 8, 9 ]
mph   = [distance/time for distance,time in zip(miles,hours)]

# [83.14087759815243, 26.124818577648767, 28.57142857142857, 157.28155339805826]

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

mph = [distance*3600/(m*60+s) for distance,ms in zip(miles,timeList) for m,s in [map(int,ms[:-1].split("m:"))]]
0 голосов
/ 26 февраля 2020

Итерация по временному списку, извлечение из него минутной и второй части и преобразование его в целое число для дальнейшего процесса.

timeList = ['7m:13s', '11m:29s', '16m:48s', '3m:26s', '120m:0s']
for element in timeList:
    min = int(str(element).split(":")[0].split("m")[0])
    sec = int(str(element).split(":")[1].split("s")[0])
    print(min,sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...