#python #list #tuples
Вопрос:
Добрый вечер,
Я пытаюсь составить кортеж из списка строк. Однако он ведет себя не так, как ожидалось. Может ли кто-нибудь просветить меня?
l = ['NP', 'shot']
tups = map(lambda x: tuple(x), l[-1])
# Desired result
print(tups) #('shot')
# Result
print(tups) # [('s',), ('h',), ('o',), ('t',)]
# or
print(tups) # <map object at 0x000000001691FD00>
Комментарии:
1. Вы хотите перейти
['NP', 'shot']
в('NP', 'shot')
?2. Просто используйте
(l[-1],)
3.
('shot')
на самом деле это не кортеж.('shot',)
является…4. название и сам вопрос не совпадают , см. Комментарий № 1, пожалуйста, отредактируйте свой пост
Ответ №1:
Вы можете просто использовать скобки:
l = ['NP', 'shot']
tups = (l[-1],)
print(tups) # ('shot')
Ответ №2:
Для этого вы хотите использовать встроенную функцию tuple()
l = ['NP', 'shot']
tups = tuple(l)
print(tups)
Комментарии:
1. она хочет («выстрел») не («НП», «выстрел»)
2. Я отвечаю на вопрос, как указано в названии и в тексте. Если бы я погуглил «Список строк для кортежей в python», я бы хотел увидеть встроенный кортеж ().
3. Нет, мой ответ не ошибочен на заданный вопрос, она просто попросила преобразовать список строк в кортеж. Это список строк в виде кортежа. Я не собираюсь считать комментарий необходимой частью вопроса. Вы можете дать ответ на комментарий , но как человек, которого часто очень раздражают сложные ответы на простые вопросы в SO, я собираюсь оставить ответ, который был бы признателен, если бы я гуглил вопрос.
4. посмотрите на ответы всех остальных, все они дают («выстрел») или («выстрел»), ни один из них не похож на ваш, и она заявила, что просит («выстрел»), ваш ответ неправильный
5. а также она указала список строк для кортежа s , а не список строк для кортежа
Ответ №3:
Если бы, просто в качестве мысленного эксперимента, вы хотели map
бы поработать, вы бы сделали:
>>> l = ['NP', 'shot']
>>> next(map(lambda x: (x,), [l[-1]]))
('shot',)
Гораздо лучше просто сделать:
>>> tuple([l[-1]])
('shot',)
Или используйте форму конструктора буквального кортежа:
>>> (l[-1],)
('shot',)
Который можно сократить до:
>>> l[-1],
('shot',)
С tuple([l[-1]])
вами нужен повторяющийся контейнер-в данном случае список-чтобы вы не получили ('s', 'h', 'o', 't')
Вам это не нужно, (l[-1],)
так как аргументы литерала не повторяются; они только оцениваются:
>>> (1 2,) #1 2 will be evaluated
(3,)
>>> ("1 2",) # the string "1 2" is not iterated...
('1 2',)
>>> tuple(1 2) # self explanatory error...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> tuple("1 2") # string is iterated char by char
('1', ' ', '2')
Ответ №4:
Попробуйте это:
tuple(map(str, l[-1].split(",")))
его в буквальном виде тхо
Комментарии:
1. И почему это ненавидят? это дает тот же ответ, что и другие
2. Разбиение последней строки на запятую и сопоставление списка с
str
совершенно ненужными и не имеющими отношения к вопросу.