Как найти максимальные значения списка в Python? - PullRequest
0 голосов
/ 29 апреля 2020

Я - Python новичок и составил следующие 2 списка:

temp = [83, 384, 324.6, -234, -65, -65.838, 23, -85, -73.543, 12.345]
time = [0.0, 3.345, 4.785, 5.31, 6.67, 9.37, 10.54, 11.36, 12.554, 13.445]

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

newtemp = [83, 384, 324.6, 23, 12.345]

Ответы [ 3 ]

0 голосов
/ 29 апреля 2020

Редактировать: хорошо, если вам нужны локальные максимумы, тогда важен порядок темпов, а не знак, но я приму его для положительных локальных максимумов только в следующем примере

Ex1:

def timeToLocalMax(time,temp):
    ans=[]
    for i in range(1,len(temp)-1):
      if temp[i]>temp[i+1] and temp[i]>temp[i-1] and temp[i]>0:
        ans.append((temp[i],time[i])) # you don't have to add both, you can do either also
        #like so ans.append(temp[i]) or ans.append(time[i])
    print(ans)
time=[0.0, 3.345, 4.785, 5.31, 6.67, 9.37, 10.54, 11.36, 12.554, 13.445]
temp=[83, 384, 324.6, -234, -65, -65.838, 23, -85, -73.543, 12.345]
timeToLocalMax(time,temp)

вывод:

[(384, 3.345), (23, 10.54)]

или

[384, 23]

Пример 2: в противном случае, если вы просто хотите получить положительное значение температуры, вы можете сделать это

ans=[i for i in temp if i>0]

тогда, если вы хотите, чтобы времена соответствовали положительным значениям, вы сделали бы это

ans=[time[i] for i in range(len(temp)) if temp[i]>0]

или если вы хотите и то и другое, вы бы сделали это

ans=[(time[i],temp[i]) for i in range(len(temp)) if temp[i]>0]
0 голосов
/ 29 апреля 2020

Используйте zip () для объединения точек данных обоих списков в кортежи, используйте выражение генератора для получения всех положительных точек данных из списка из двух кортежей, используйте zip () , чтобы разделить разбитый кортеж из 2 кортежей обратно на кортежи и использовать карту со списком, чтобы получить из нее списки:

temp = [83, 384, 324.6, -234, -65, -65.838, 23, -85, -73.543, 12.345]
time = [0.0, 3.345, 4.785, 5.31, 6.67, 9.37, 10.54, 11.36, 12.554, 13.445]

p_temp, p_time = map(list,zip( *(a for a in zip(temp,time) if a[0]>0) ))

print(p_temp)
print(p_time)

Вывод:

[83, 384, 324.6, 23, 12.345]
[0.0, 3.345, 4.785, 10.54, 13.445]

Вы можете найти объяснения для zip(), map() и list() здесь: https://docs.python.org/3/library/functions.html


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

tmp1 = list(zip(temp,time))
tmp2 = list((a for a in tmp1 if a[0]>0))
tmp3 = list(zip( *tmp2 ))
print(tmp1)
print(tmp2)
print(tmp3)
print(*tmp3)

Вывод:

# list(zip(temp,time))
[(83, 0.0), (384, 3.345), (324.6, 4.785), (-234, 5.31), (-65, 6.67), (-65.838, 9.37),
 (23, 10.54), (-85, 11.36), (-73.543, 12.554), (12.345, 13.445)]

# list((a for a in tmp1 if a[0]>0))
[(83, 0.0), (384, 3.345), (324.6, 4.785), (23, 10.54), (12.345, 13.445)] 

# list(zip( *tmp2 ))
[(83, 384, 324.6, 23, 12.345), (0.0, 3.345, 4.785, 10.54, 13.445)]

# *list(zip( *tmp2 ))
(83, 384, 324.6, 23, 12.345)  (0.0, 3.345, 4.785, 10.54, 13.445)
0 голосов
/ 29 апреля 2020

Я думаю, что вы ищете что-то вроде этого:

temp = [83, 384, 324.6, -234, -65, -65.838, 23, -85, -73.543, 12.345]
time = [0.0, 3.345, 4.785, 5.31, 6.67, 9.37, 10.54, 11.36, 12.554, 13.445]

max_temp = max(temp)
max_temp_position = temp.index(max_temp)
max_temp_time = time[max_temp_position]

print(max_temp, max_temp_time )

Это можно сделать намного проще и лучше, если вы используете список словарей, а не 2 списка, как я упоминал в комментариях выше.

[
  {temp:384, time:3.3},
  {temp:324, time:4,7}, 
  ...
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...