Строка разделяется на символы при добавлении в кортеж - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь добавить кортеж со строкой в ​​список, после добавления кортежа в список кортеж разбивает строки на его символы.

Мой код:

def create_list():
    raw_data = ['hello world', 'hello world 1']
    new_data = []

    for data in raw_data:
        new_data.append(tuple(data))
    print(new_data)

Вывод

[("" "," h "," e "," l "," l "," o ", '', 'w', 'o', 'r','l', 'd', "'"), ("" "," h "," e "," l "," l "," o ",' ',' w ',' o ','r ',' l ',' d ',' ',' 1 ', "'")]

Ожидаемый результат

[('hello world'), ('Привет, мир 1')]

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Ваша ошибка в том, что tuple(s)s a str) не помещает s в tuple, но создает tuple, где каждый элемент представляет собой один символ из s.Вместо этого используйте буквальный синтаксис tuple (s,) (который тогда является tuple одного элемента, а именно s):

def create_list():
    raw_data = ['hello world', 'hello world 1']
    new_data = []

    for data in raw_data:
        new_data.append(("'"+str(data)+"'",))
    print(new_data)
0 голосов
/ 24 сентября 2018

Чтобы развернуть ответы других, еще один способ сообщить ему, что вы хотите создать кортеж с одной строкой, - предоставить список.

def create_list():
    raw_data = ['hello world', 'hello world 1']
    new_data = []
    for data in raw_data:
        new_data.append(tuple([data]))
    print(new_data)
0 голосов
/ 24 сентября 2018

Вы можете представить кортеж, содержащий один элемент, с помощью (item,).Таким образом, ваш список может быть выражен с помощью

new_data = [(data,) for data in raw_data]
# [('hello world',), ('hello world 1',)]

. Различие между tuple(string) и (string,) состоит в том, что первый - это tuple, созданный из другой последовательности (которая является строкой), тогда какПоследний является кортеж, который содержит одну строку.

...