Разделение кортежа на список без разделения на отдельные символы - PullRequest
1 голос
/ 23 июня 2019

У меня проблемы с моим кодом Python.Я хочу получить значения из кортежа и поместить их в списки.В приведенном ниже примере я хотел бы включить художников в один список, а доходы - в другой.Затем поместите их в кортеж.

def sort_artists(x):
    artist = []
    earnings = []
    z = (artist, earnings)
    for inner in x:
        artist += inner[0]
        earnings += inner[1]
    return z

artists = [("The Beatles", 270.8), ("Elvis Presley", 211.5), ("Michael Jackson", 183.9)]
print(sort_artists(artists))

Я могу напечатать `inner [0], и это даст мне 'The Beatles', но когда я пытаюсь добавить его в пустой список, он разбивает егодо отдельных букв.Что не так?

Ошибка (хотя я тоже пробовал без бита 'заработок', а также с использованием append и других вещей:

Traceback (most recent call last):
  File "Artists.py", line 43, in <module>
    print(sort_artists(artists))
  File "Artists.py", line 31, in sort_artists
    earnings += inner[1]
TypeError: 'float' object is not iterable
Command exited with non-zero status 1

Желаемый вывод:

(['Elvis Presley', 'Michael Jackson', 'The Beatles'], [270.8, 211.5, 183.9]) 

Это то, что происходит в настоящее время (без учета дохода):

(['T', 'h', 'e', ' ', 'B', 'e', 'a', 't', 'l', 'e', 's', 'E', 'l', 'v', 'i', 's', ' ', 'P', 'r', 'e', 's', 'l', 'e', 'y', 'M', 'i', 'c', 'h', 'a', 'e', 'l', ' ', 'J', 'a', 'c', 'k', 's', 'o', 'n'], []) 

Ответы [ 3 ]

2 голосов
/ 23 июня 2019

попробуйте этот код:

def sort_artists(x):
    artist = []
    earnings = []
    z = (artist, earnings)
    for inner in x:
        artist.append(inner[0])
        earnings.append(inner[1])
    return z

artists = [("The Beatles", 270.8), ("Elvis Presley", 211.5), ("Michael Jackson", 183.9)]
print(sort_artists(artists))

вывод:

(['The Beatles', 'Elvis Presley', 'Michael Jackson'], [270.8, 211.5, 183.9])
1 голос
/ 23 июня 2019

Вы можете использовать встроенную функцию zip, чтобы разделить списки в одно короткое выражение:

def sort_artists(x):
    return tuple(zip(*x))

artists = [("The Beatles", 270.8), ("Elvis Presley", 211.5), ("Michael Jackson", 183.9)]

names, earnings = sort_artists(artists)
print(names)
print(earnings)
0 голосов
/ 23 июня 2019
def sort_artists(x):
    artist = []
    earnings = [] 
    for i in range(len(x)):
        artist.append(x[i][0])
        earnings.append(x[i][1])
    return (artist,earnings)

мы можем получить доступ к элементу списка по его позиции

print(artist[0]) 
#o/p
('The Beatles', 270.8)

теперь мы можем также распаковать кортеж с помощью индекса

#for artist
print(artist[0][0])
o/p
'The Beatles'

#for earnings
print(artist[0][1])
o/p
270.8
...