#python #python-3.x
Вопрос:
Я хочу объединить все кортежи из списка в строку. Мне также нужно включить двоеточие между числами и пробел между числами и меридианом. Моя функция :
def create_time_list(filename):
f = open(filename,"r")
f.seek(0)
fchar = f.read(1)
if not fchar:
raise Exception("EmptyFileError")
f.seek(0)
list = []
for line in f:
subtuple = tuple(line.split())
for i in subtuple:
if len(i) > 2 or len(i) < 1 :
raise Exception("ImproperTimeError")
if not subtuple[0].isdigit() or not subtuple[1].isdigit() or (int(subtuple[0]) > 12) or (int(subtuple[1]) > 59):
raise Exception("ImproperTimeError")
list.append(subtuple)
return list
Мой список :
[('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'), ('1', '34', 'AM'), ('12', '48', 'PM'), ('4', '13', 'AM'), ('11', '09', 'AM'), ('3', '12', 'PM'), ('4', '10', 'PM')]
Ввод :
4 12 PM
8 23 PM
4 03 AM
1 34 AM
12 48 PM
4 13 AM
11 09 AM
3 12 PM
4 10 PM
Как я хочу вывести это :
['4:12 PM' , '8:23 PM' , '4:03 AM', '1:34 AM' , '12:48 PM' , '4:13 AM' , '11:09 AM' , '3:12 PM' , '4:10 PM']
Комментарии:
1. Пытаться:
lst.append("{}:{} {}".format(*subtuple))
. Обратите внимание на переименованную переменную, так как вы не должны использовать это имяlist
.
Ответ №1:
Еще один способ:
lst = [('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'), ('1', '34', 'AM'), ('12', '48', 'PM'), ('4', '13', 'AM'), ('11', '09', 'AM'), ('3', '12', 'PM'), ('4', '10', 'PM')]
list_out = [f"{h}:{m} {abr}" for (h, m, abr) in lst]
print(list_out)
Результат:
['4:12 PM', '8:23 PM', '4:03 AM', '1:34 AM', '12:48 PM', '4:13 AM', '11:09 AM', '3:12 PM', '4:10 PM']
Ответ №2:
Один из лучших способов-это вы из map method
:
list_ = [('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'),
('1', '34', 'AM'), ('12', '48', 'PM'), ('4', '13', 'AM'),
('11', '09', 'AM'), ('3', '12', 'PM'), ('4', '10', 'PM')]
print(list(map(lambda i: i[0] ':' i[1] ' ' i[-1], list_)))
Способ-2
автор [@schwobaseggl][1]
в этом случае логика работает как раз iterator over list
так, и с помощью string-formatting
добавления этой строки во вновь созданный список мы получим результат, и этот формат будет {}:{} {}
list_ = [('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'),
('1', '34', 'AM'), ('12', '48', 'PM'), ('4', '13', 'AM'),
('11', '09', 'AM'), ('3', '12', 'PM'), ('4', '10', 'PM')]
lst = []
for i in list_:
lst.append("{}:{} {}".format(*i))
# for one line list creation we can use list-comp by [@Andres Silva][1]
lst = ["{}:{} {}".format(*subtuple) for subtuple in list_]
print(lst)
выход :
['4:12 PM', '8:23 PM', '4:03 AM', '1:34 AM', '12:48 PM', '4:13 AM', '11:09 AM', '3:12 PM', '4:10 PM']
Комментарии:
1. сказал мне , что этот список невозможно вызвать, я могу сделать что-то не так, если честно, вторая неделя python
2. Метод 3: использование понимания списка.
lst = ["{}:{} {}".format(*subtuple) for subtuple in list_]
3.@DenisGojinetchi
list
-зарезервированное ключевое слово, используемое дляtop level function list
list function
объекта списка возврата4. @денис, обратите внимание, что вы не должны использовать
list
в качестве переменной, так как это имя зарезервировано. Попробуйте изменить переменнуюlist
для некоторого изменения (например,list_
в приведенном выше решении), перезапустить ядро и снова запустить код.
Ответ №3:
Попробуй вот это.
l = [
('4', '12', 'PM'), ('8', '23', 'PM'), ('4', '03', 'AM'),
('1', '34', 'AM'), ('12', '48', 'PM'), ('4', '13', 'AM'),
('11', '09', 'AM'), ('3', '12', 'PM'), ('4', '10', 'PM')
]
result = [f"{hh}:{mm} {xm}" for hh, mm, xm in l]
print(result)
# ['4:12 PM', '8:23 PM', '4:03 AM', '1:34 AM', '12:48 PM', '4:13 AM', '11:09 AM', '3:12 PM', '4:10 PM']
Известно, что понимание списков в python почти всегда происходит быстрее. Вы распаковываете переменные из кортежа в соответствующие переменные hh
mm
, xm
а затем , используя эти переменные, создаете строку с помощью f-строк.
Ответ №4:
Попробуйте, x-это ваш список
y = []
for timesTup in x:
z = ':'.join((timesTup[0],timesTup[1]))
y.append(z ' ' timesTup[-1])