Изменить значение в списке внутри списка

#python #list

#питон #Список

Вопрос:

Я хочу удалить ] из каждого элемента в этом списке (а затем сравнить часы и получить среднее время между каждым часом). Как я могу это сделать? Список выглядит следующим образом:

['21:35:32]', '21:35:40]', '21:36:04]', '21:37:24]', '21:37:33]', '21:37:47]', '17:26:30]', '17:26:33]', '17:26:40]' , и т.д…

До сих пор я кодировал это:

 getfile = open('_Echat.txt', 'r', errors="ignore")
read = getfile.read()

bigstring = ''.join(read)
result = [line.split(' ') for line in bigstring.split('[')]
horas = []
for x in result:
    if len(x) > 2:
        horas.append(x[1])
print(horas)
 

Ответ №1:

Вопрос не ясен. Я не знаю, что вы имеете в виду, сравнивая часы. Но я написал код, который выдаст вам список часов.

 #use this on read data from file
hours = [int(read[i].replace(']', '').split(':')[0]) for i in range(len(read))]

#To get minutes and seconds use `[1]` and `[2]` respectively in the above code
 

это вывод для заданных данных

 [21, 21, 21, 21, 21, 21, 17, 17, 17]
 

Ответ №2:

Есть два очень простых решения для понимания списка:

 listing = ['21:35:32]', '21:35:40]', '21:36:04]', '21:37:24]', '21:37:33]', '21:37:47]', '17:26:30]', '17:26:33]', '17:26:40]']

#replace character you do not want - better option
newlist = [x.replace(']', '') for x in listing]
#select only wanted part of string you need - only if all are similar and you know len
newlist2 = [x[0:8] for x in listing]
 

Оба заканчиваются списком:

 ['21:35:32', '21:35:40', '21:36:04', '21:37:24', '21:37:33', '21:37:47', '17:26:30', '17:26:33', '17:26:40']
 

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

 hours = [int(x[0:2]) for x in listing]
#[21, 21, 21, 21, 21, 21, 17, 17, 17]
 

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

И, наконец, среднее:

 import statistics 
print(round(statistics.mean(hours)))
#20