朋友不知道哪里弄来了一长串单词列表,一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了,而这个在Python
中可以怎么实现呢?我记录如下:
使用itertools
模块实现排列组合
在 Python 中,排列组合可以通过 itertools
模块来实现。以下是两个主要函数的介绍和使用示例:
itertools.permutations(iterable[, r])
:返回输入可迭代对象中元素的所有可能排列。r
是排列的长度,默认为可迭代对象的长度。itertools.combinations(iterable, r)
:返回输入可迭代对象中元素的所有可能组合。r
是组合的长度。
示例代码
import itertools
# 示例列表
elements = [1, 2, 3]
# 获取所有排列
permutations = list(itertools.permutations(elements))
print("排列:", permutations)
# 获取所有组合,组合长度为2
combinations = list(itertools.combinations(elements, 2))
print("组合:", combinations)
输出
排列: [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
组合: [(1, 2), (1, 3), (2, 3)]
通过这两个函数,我们可以方便地生成排列和组合,适用于需要穷举所有可能性的场景。
列出文档中各不同单词的组合并随机乱序
读取文本中单词
将文本中的单词读入到列表中,后续按要求划分。
import itertools
# 读取文本中的单词,并存储到列表中
def read_words_from_file(file_path):
words = []
with open(file_path, 'r') as file:
for line in file:
words.extend(line.strip().split())
return words
# 获取单词列表
words = read_words_from_file('words.txt')
获取组合
以组合长度2为例,我们可以这样获取单词的组合:
# 获取所有组合,组合长度为2
combinations = list(itertools.combinations(words, 2))
print("组合:", combinations)
列表数据随机排序
要对 Python 列表进行随机排序,可以使用 random 模块中的 shuffle 函数。
注:random.shuffle
函数会直接修改原列表,因此不需要返回值。每次运行这段代码时,列表的顺序都会随机变化。
import random
import copy
# 深复制combinations列表,避免影响原来的排序
list_for_shuffle = copy.deepcopy(combinations)
# 使用 shuffle 函数随机排序列表
random.shuffle(list_for_shuffle)
# 输出随机排序后的列表
print(list_for_shuffle)
# 输出原列表
print(combinations)
# 将list_for_shuffle写入到shuffle.txt文件
with open('shuffle.txt', 'w') as f:
for item in list_for_shuffle:
f.write("%s\n" % str(item))