Попарное объединение элементов списка
Мне необходимо написать программу Python, которая берет слово из пяти букв и производит всевозможные двухбуквенные строки, основанные на буквах слова. (то есть, например, из слова тапок производит комбинации: та, тп, то, тк, ат, ап и т.д.). Использовать itertools permutations нельзя.
Написала следующую программу:
word = list('flash')
pairs = []
for i in word:
i += [i+1]
if i not in pairs:
pairs.append(i)
print(pairs)
Но выдаёт ошибку на строке i += [i+1].
TypeError: can only concatenate str (not "int") to str
Подскажите, пожалуйста, как это исправить? Или код изначально неправильно написан?
Ответы (2 шт):
Если нужны только пары, то можно "в лоб":
word = "flash"
pairs = []
for i in range(len(word)):
for letter in word[:i] + word[i+1:]:
pairs.append(word[i] + letter)
print(pairs)
В первом цикле берётся одна буква из слова. Во втором - клеится с каждой буквой из оставшихся.
просто как один из вариантов:
word = 'flash'
pairs = []
for i in range(len(word)):
pairs.extend(map(lambda x,y: x+y, (w:=list(word)).pop(i)*4, w))
print(pairs)
'''
['fl', 'fa', 'fs', 'fh', 'lf', 'la', 'ls', 'lh', 'af', 'al', 'as', 'ah',
'sf', 'sl', 'sa', 'sh', 'hf', 'hl', 'ha', 'hs']
'''
в цикле pop поочередно выдергивает букву из слова, после чего функция map() соединяет ее с оставшимися буквами и extend добавляет результат в список пар.
PS. w:=list(word) работает в python 3.8 и новее