Конкатенация строки произвольно в Python: - PullRequest
0 голосов
/ 10 марта 2019

Мне нужно сгенерировать конкатенацию строки:

Моя функция имеет n и stuff в качестве входных данных, она должна генерировать следующую произвольную последовательность

Здесь N - это количество входных строк, которые необходимо учитывать.

Пример входов:

N = 3, материал = ['x', 'y', 'z']

Образцы Ouputs:

xy xz yz

Пояснение к выводу:

xy -> комбинация 1 и 2

xz -> комбинация 1 и 3

yz -> комбинация 2 и 3

Диапазон N не является специфичным для 3. То есть диапазон N <= 1000. </p>

Мой код:

for _ in range(int(input())):
n = int(input())
stuff = []
for i in range(0,n):
    stuff.append(input())

for L in stuff[0:]:
    for J in stuff[1:-1]:
        k = L+J
        print(k)

Мой вывод:

х уу з.ы.

Я понял, что не смог правильно выполнить индексацию в списке. Но также я не смог исправить эту ошибку.

Question1: Может кто-нибудь помочь мне исправить индексацию списка в циклах?

Вопрос2: Сложность времени - O (n ^ 2). Можно ли оптимизировать до O (n)?

Ответы [ 2 ]

3 голосов
/ 10 марта 2019

Может быть, это не то, что вы ищете.Но попробуйте это для новичка:

stuff = []
N = int(input("Enter the size of N: "))
for n in range(N):
    s = input("Enter stuff %i : " %(n+1))
    stuff.append(str(s))   

for ss in range(len(stuff)):
    st = stuff[ss]
    for x in range(ss+1, len(stuff)):
        comb = st + stuff[x]
        print (comb)

или вы можете упростить, используя itertools.combination:

from itertools import combinations   

stuff = []
N = int(input("Enter the size of N: "))
for n in range(N):
    s = input("Enter stuff %i : " %(n+1))
    stuff.append(str(s)) 

result = [''.join(i) for i in combinations(stuff, 2)]
print (result)
2 голосов
/ 10 марта 2019

Этого можно достичь с помощью списочных представлений и itertools.combinsk :

from itertools import combinations    
res = [''.join(item) for item in combinations(stuff, 2)]
# ['xy', 'xz', 'yz']

, где 2 - длина желаемой комбинации

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