Я хочу переставить данные ввода (числа, строки, с плавающей точкой и т. Д. c) в длину (дано) - PullRequest
0 голосов
/ 12 апреля 2020

Мой код, здесь вы прочитали мою проблему, пожалуйста, и дайте мне лучший результат, если можете.

import itertools

variable, r = input().split()
r = int(r)
l = list(itertools.permutations(variable,r))
for i in l:
    for j in range(0,r):
        print(f'{i[j]}{i[j+1]}')

Если мой ввод HACK 2

Мой вывод должен выглядеть так

AC
AH
AK
CA
CH
CK
HA
HC
HK
KA
KC
KH

Я получаю здесь индекс кортежа ошибка в этой строке print(f'{i[j]}{i[j+1]}')

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
f'{i[j]}{i[j+1]}'

Представляет два элемента из i. Но мы хотим использовать все предметы из i, сколько бы их ни было. Скажем, например, что мы вводим HACK 3; itertools.permutations произведет перестановку, такую ​​как ('H', 'A', 'C'), и мы хотим вывести один элемент 'HAC' - мы не хотим снова l oop и получить 'HA', 'AC' отдельно.

То, что мы хотим сделать, это просто объединить все элементы в одну строку. Мы делаем это, используя встроенный .join строковый метод:

# Also, there is no need to make a list ahead of time; we can iterate directly
# on the itertools results.
for item in itertools.permutations(variable,r):
    print(''.join(item))
    # Another way is to pass the letters as separate argument to `print`,
    # and let it do the joining implicitly:
    # print(*item, sep='')
    # This is one of those neat things that becomes possible due to `print`
    # becoming a function in 3.x.
0 голосов
/ 12 апреля 2020

Дело в том, что ваш кортеж имеет только два элемента, но ваш индекс от 0 до r, что означает, что для рядов он будет от 0,1,2. Это создает кортеж ошибки из индекса

Право на серию будет

for i in l:
    for j in range(0,r-1):
        print(f'{i[j]}{i[j+1]}')
...