написать ноту гитары, используя два списка - PullRequest
0 голосов
/ 03 мая 2020

У меня есть два списка:

list1=('a','b','c')
list2=('2','1','3')

и текстовый файл, текстовый файл имеет 3 строки, поэтому я хочу добавить
'a' во 2-й строке '-' в других, 'b' в 1-й строке
'-' в других и 'c' в 3-й строке
'-' в других в соответствии со списком1 и списком2 следующим образом

xxxx-b-
xxxxa--
xxxx--c

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я сделал это, но я думаю, что есть хороший метод, чем мой

list1=['1','4','3','2']
list2=['a','b','c','d'] 
j=0
 while j < len(list1):
    with open("note2.txt",'r+') as f:
        line = f.readlines()
        note=""
        f.seek(0)
        for index,line in enumerate(line):
            if index==list1[j]:
                note+=line.strip()+ str(list2[j])+'\n'
            else: 
                note+=line.strip()+ '-\n'

        f.write(note)

    f.close()
    j+=1
0 голосов
/ 03 мая 2020

Первая задача - правильно отсортировать первый список. Это легко, если вы zip объедините два списка, а затем отсортируете их по номеру строки (int-преобразованный):

>>> list1 = ['a', 'b', 'c']
>>> list2 = ['2', '1', '3']
>>> sorted(zip(list1, list2), key=lambda p: int(p[1]))
[('b', '1'), ('a', '2'), ('c', '3')]

Затем вам нужно отформатировать букву в соответствующую строку. Я бы сделал это с чем-то вроде:

'xxxx' + ''.join(char if char == letter else '-' for char in 'abc')

, так что все вместе это:

>>> for row in [
...     'xxxx' + ''.join(char if char == letter else '-' for char in 'abc')
...     for letter, _line in sorted(zip(list1, list2), key=lambda p: int(p[1]))
... ]:
...     print(row)
...
xxxx-b-
xxxxa--
xxxx--c

Теперь вам просто нужно записать его в соответствующий текстовый файл вместо его печати; так как вы не указываете, как вы хотите это сделать (это конкретный c текстовый файл? это параметр функции? это существующий файл, к которому вы добавляете?), я оставлю эту часть для Вы должны заполнить.:)

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