Список строк для кортежей

#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 совершенно ненужными и не имеющими отношения к вопросу.