Как я могу добавить строку в кортежи в списке? - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю приложение, которое генерирует ходячие басовые линии из указанных аккордов. Он всегда начинается с root (1-й аккордовый тон), затем следуют перестановки 1-го, 3-го и 5-го аккордовых тонов.

Я хотел бы добавить строку (root) к кортежи (перестановки) в списке в Python, но мой код не работает. Позвольте мне поставить свой код:

# pip install pychord

from pychord import Chord
from itertools import permutations 

def returnPermutations(arr, r): 
    return list(permutations(arr, r))

c7 = Chord("C7")
print("c7.components()", c7.components())
print("Get the Triad: c7.components()[0:3]: ", c7.components()[0:3])

chordTonePermutations = returnPermutations(c7.components()[0:3], 3)
print("chordTonePermutations: ", chordTonePermutations)
print("chordTonePermutations[0]: ", chordTonePermutations[0])

# walkingBass = tuple((c7.components()[0],)) + chordTonePermutations[0]
walkingBass = list(tuple((c7.components()[0],)) + chordTonePermutations[0])

walkingBassList = []
# walkingBassList = list.append(walkingBass)

for chordTones in chordTonePermutations:
  print("chordTones", chordTones)
  walkingBass = tuple((c7.components()[0],)) + chordTones
  # walkingBass = list(tuple((c7.components()[0],)) + chordTones)
  walkingBassList = list.append(walkingBass)

print("walkingBass", walkingBass)

print("walkingBassList", walkingBassList)
# What I expect is a list of tuples which always begins with the root 'C', 
# plus the permutations of the triad (the first 3 chord tones):
# walkingBassList [
# ('C', 'C', 'E', 'G'), 
# ('C', 'C', 'G', 'E'), 
# ('C', 'E', 'C', 'G'), 
# ('C', 'E', 'G', 'C'), 
# ('C', 'G', 'C', 'E'), 
# ('C', 'G', 'E', 'C')]

... Этот код дает мне следующий вывод с ошибкой:

c7.components() ['C', 'E', 'G', 'Bb']
Get the Triad: c7.components()[0:3]:  ['C', 'E', 'G']
chordTonePermutations:  [('C', 'E', 'G'), ('C', 'G', 'E'), ('E', 'C', 'G'), ('E', 'G', 'C'), ('G', 'C', 'E'), ('G', 'E', 'C')]
chordTonePermutations[0]:  ('C', 'E', 'G')
chordTones ('C', 'E', 'G')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-84-3a01c9d6da74> in <module>()
     24   walkingBass = tuple((c7.components()[0],)) + chordTones
     25   # walkingBass = list(tuple((c7.components()[0],)) + chordTones)
---> 26   walkingBassList = list.append(walkingBass)
     27 
     28 print("walkingBass", walkingBass)

TypeError: descriptor 'append' requires a 'list' object but received a 'tuple'

Итак, я окружил кортеж списком:

  # walkingBass = tuple((c7.components()[0],)) + chordTones
  walkingBass = list(tuple((c7.components()[0],)) + chordTones)

Теперь это дает мне TypeError: append() takes exactly one argument (0 given):

TypeError                                 Traceback (most recent call last)
<ipython-input-86-e2ecc32a34c8> in <module>()
     24   # walkingBass = tuple((c7.components()[0],)) + chordTones
     25   walkingBass = list(tuple((c7.components()[0],)) + chordTones)
---> 26   walkingBassList = list.append(walkingBass)
     27 
     28 print("walkingBass", walkingBass)

TypeError: append() takes exactly one argument (0 given)

... Подождите. (0 дано)? Один аргумент walkingBass уже дан, верно? Что со мной не так?

Следующий вопрос мне не помогает, потому что у дополнения действительно нет аргументов. Он продолжает говорить: TypeError: append () принимает ровно один аргумент (0 дано)

... Я в полном замешательстве. Может ли кто-нибудь помочь мне исправить это? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

Вы пытаетесь вызвать append как функцию, но это метод. Поэтому вместо:

walkingBassList = list.append(walkingBass)

Вам нужно сделать:

walkingBassList.append(walkingBass)

В методе append self привязывается к walkingBassList, поэтому он знает, что добавить к. Без этой информации мало что могло бы сделать.

2 голосов
/ 11 апреля 2020
walkingBassList = list.append(walkingBass)

должно быть

walkingBassList.append(walkingBass)
...