#python #itertools #more-itertools
Вопрос:
Этот приятный скрипт генерирует все 4 перестановки символов из данного набора s
и печатает их на новых строках.
import itertools s = ('7', '8', '-') l = itertools.product(s, repeat=4) print(*l, sep='n')
Пример вывода:
... ('9', '-', '7', '8') ('9', '-', '7', '9') ('9', '-', '8', '7') ('9', '-', '8', '8') ('9', '-', '8', '9') ...
Я не могу понять, как удалить все одинарные кавычки, запятые и левую/правую скобки.
Желаемый результат:
... 9-78 9-79 9-87 9-88 9-89 ...
Попробовал добавить:
c = [] for i in l: i = i.replace(",", '') c.append(i) print(*c, sep='n')
Ошибка: AttributeError: 'tuple' object has no attribute 'replace'
Также пытался: я, кажется, не могу найти, куда вложить print(' '.join())
логику.
Комментарии:
1.
print(*l, sep='n')
печатается кортеж в каждой строке, который автоматически добавляет скобки и запятые при печати. попробуйте извлечь элементы кортежа и использоватьjoin
для создания строки
Ответ №1:
Каждый раз, когда вы печатаете значение, вы можете использовать:
for vals in l: print("".join([str(v) for v in vals]))
Это просто объединяет все символы, отмечая, что для этого .join
требуется, чтобы значения были строками.
Вы также можете использовать:
for vals in l: print(*vals)
… но у этого есть пространство между значениями.
Комментарии:
1. Спасибо вам за помощь. Легко перевести ваше решение для записи в файл с помощью:
with open('out.txt', 'w') as f: for i in l:f.write(''.join([str(v) for v in i]) 'n')
.