Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
173 views
in Technique[技术] by (71.8m points)

python - Split a list to pair of words with a total character length of 20

I take as input an ascii text file and then I brake it intro words. How can I display word pairs with total character length of 20?And pairs that can not have a total character length of 20 to a different list.

Code:

file = open('text.txt', 'r') 
file_contents = file.read()

split_sentence = file_contents.split(' ')
print(split_sentence) 

n = 20

file.close()

Output:

['Lorem', 'ipsum', 'dolor', 'sit', 'amet,', 'consectetur', 'adipiscing', 'elit
']

Expected Output:

['Lorem amet consectetur', 'ipsum dolor adipiscing'] splitted to total 20 character length of 20.

['sit','elit'] do not contain 20 characters(sit+elit=7 total character length)

question from:https://stackoverflow.com/questions/65645151/split-a-list-to-pair-of-words-with-a-total-character-length-of-20

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can achieve what you want with dynamic programming.

The following code creates all combinations of words of length less or equal to 20:

words = ['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit']

def disjoint(a, b):
    for i in a:
        if i in b:
            return False
    return True

r = [[] for _ in range(21)]
for i, w in enumerate(words):
    r[len(w)].append([i])

for i in range(21):
    for j in range(i):
        for a in r[j]:
            for b in r[i - j]:
                if disjoint(a, b):
                    r[i].append(a + b)

answer = [" ".join([words[i] for i in s]) for s in r[20]]

r[i] represents all possible combinations of words of length i (each word of the initial list words is represented by its index), and is constructed recursively. The function disjoint is here to prevent the repetition of the same word in a combination.

answer in the end is the following list:

['amet Lorem consectetur',
 'amet ipsum consectetur',
 'amet dolor consectetur',
 'amet consectetur Lorem',
 'amet consectetur ipsum',
 'amet consectetur dolor',
 'elit Lorem consectetur',
 'elit ipsum consectetur',
 'elit dolor consectetur',
 'elit consectetur Lorem',
 'elit consectetur ipsum',
 'elit consectetur dolor',
 'Lorem amet consectetur',
 'Lorem elit consectetur',
 'Lorem ipsum adipiscing',
 'Lorem dolor adipiscing',
 'Lorem adipiscing ipsum',
 'Lorem adipiscing dolor',
 'Lorem consectetur amet',
 'Lorem consectetur elit',
 'ipsum amet consectetur',
 'ipsum elit consectetur',
 'ipsum Lorem adipiscing',
 'ipsum dolor adipiscing',
 'ipsum adipiscing Lorem',
 'ipsum adipiscing dolor',
 'ipsum consectetur amet',
 'ipsum consectetur elit',
 'dolor amet consectetur',
 'dolor elit consectetur',
 'dolor Lorem adipiscing',
 'dolor ipsum adipiscing',
 'dolor adipiscing Lorem',
 'dolor adipiscing ipsum',
 'dolor consectetur amet',
 'dolor consectetur elit',
 'amet Lorem consectetur',
 'amet ipsum consectetur',
 'amet dolor consectetur',
 'elit Lorem consectetur',
 'elit ipsum consectetur',
 'elit dolor consectetur',
 'Lorem amet consectetur',
 'Lorem elit consectetur',
 'ipsum amet consectetur',
 'ipsum elit consectetur',
 'dolor amet consectetur',
 'dolor elit consectetur',
 'adipiscing Lorem ipsum',
 'adipiscing Lorem dolor',
 'adipiscing ipsum Lorem',
 'adipiscing ipsum dolor',
 'adipiscing dolor Lorem',
 'adipiscing dolor ipsum',
 'Lorem ipsum adipiscing',
 'Lorem dolor adipiscing',
 'ipsum Lorem adipiscing',
 'ipsum dolor adipiscing',
 'dolor Lorem adipiscing',
 'dolor ipsum adipiscing',
 'consectetur amet Lorem',
 'consectetur amet ipsum',
 'consectetur amet dolor',
 'consectetur elit Lorem',
 'consectetur elit ipsum',
 'consectetur elit dolor',
 'consectetur Lorem amet',
 'consectetur Lorem elit',
 'consectetur ipsum amet',
 'consectetur ipsum elit',
 'consectetur dolor amet',
 'consectetur dolor elit',
 'amet consectetur Lorem',
 'amet consectetur ipsum',
 'amet consectetur dolor',
 'elit consectetur Lorem',
 'elit consectetur ipsum',
 'elit consectetur dolor',
 'Lorem adipiscing ipsum',
 'Lorem adipiscing dolor',
 'ipsum adipiscing Lorem',
 'ipsum adipiscing dolor',
 'dolor adipiscing Lorem',
 'dolor adipiscing ipsum',
 'adipiscing Lorem ipsum',
 'adipiscing Lorem dolor',
 'adipiscing ipsum Lorem',
 'adipiscing ipsum dolor',
 'adipiscing dolor Lorem',
 'adipiscing dolor ipsum',
 'consectetur amet Lorem',
 'consectetur amet ipsum',
 'consectetur amet dolor',
 'consectetur elit Lorem',
 'consectetur elit ipsum',
 'consectetur elit dolor',
 'Lorem consectetur amet',
 'Lorem consectetur elit',
 'ipsum consectetur amet',
 'ipsum consectetur elit',
 'dolor consectetur amet',
 'dolor consectetur elit',
 'consectetur Lorem amet',
 'consectetur Lorem elit',
 'consectetur ipsum amet',
 'consectetur ipsum elit',
 'consectetur dolor amet',
 'consectetur dolor elit']

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...