首页 > 其他分享 >记一个itertools排列组合和列表随机排序的例子

记一个itertools排列组合和列表随机排序的例子

时间:2024-12-28 17:29:31浏览次数:7  
标签:shuffle 组合 列表 itertools words combinations 排列组合 排序

朋友不知道哪里弄来了一长串单词列表,一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了,而这个在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))

乱序后的列表和原列表
文件截图

标签:shuffle,组合,列表,itertools,words,combinations,排列组合,排序
From: https://blog.csdn.net/Humbunklung/article/details/144791532

相关文章

  • 删除拼排序链表中的重复元素(最优解)
    题目来源82.删除排序链表中的重复元素II-力扣(LeetCode)题目描述给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例1:输入:head=[1,2,3,3,4,4,5]输出:[1,2,5]示例2:输入:head=[1,1,1,2,3]......
  • 十大排序---下
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、归并排序二、快速排序三、计数排序四、桶排序五、基数排序总结前言今天我们来继续学习十大排序中剩下的五个。提示:以下是本篇文章正文内容,下面案例可供参考一、归并排序    ......
  • mysql 一个字段多种排序方式
    一、mysql一个字段多种排序数据idname1tkj1000020-1.11test2tkj1000020-13tkj1000020-2.1test4tkj1000020-2.2test5tkj1000020-26tkj1000020.1test7tkj1000020.1test_0018tkj1000020.2test9tkj1000020.3test10tkj1000020aest......
  • sql超时 sql中存在关键字 in 和 not in 和 <> 和 分组排序和 子查询 代码优化
    针对SQL查询中存在 IN、NOTIN、<>、分组排序和子查询的情况,优化这些查询可以显著提高性能。以下是一些具体的优化建议:1.优化 IN 和 NOTIN使用 IN 替代 NOTIN:NOTIN 在处理 NULL 值时可能会导致性能问题。可以考虑使用 NOTEXISTS 或 LEFTJOIN 替代......
  • 148. 排序链表
    题目链接解题思路:在链表上使用排序算法。注意,不能使用快排,因为快排的最差时间复杂度是O(n^2),数组形式的快排,以随机数划分能够得到O(n*logn),但是链表的形式,不太好以随机数的方式划分。所以最好的排序方法是使用归并排序。先用快慢指针,将链表分成两部分,然后两部分分别归并排......
  • 【Redis Zset】Redis Zset多字段排序方案设计
    背景最近拿到多个排行榜相关的需求,按财富值,魅力值等单个或多个字段进行排序默认取前N条数据,考虑使用Redis进行排行榜实现,数据结构使用zset,本文对财富值和魅力值二个或多个字段排序的思路进行说明; 需求背景排行榜,按财富值和魅力值进行倒序排序,优先财富值排序,财富值相同则取魅......
  • 闲来无事,写一个排序分页加去重的逻辑
    实际场景中可能需要对t2表中的字段加筛选条件,这里进行了简化。 --------------------------------Tablestructurefort_main_group------------------------------DROPTABLEIFEXISTS`t_main_group`;CREATETABLE`t_main_group`(`id`varchar(36)CHARACTERSET......
  • c语言实现重要算法二分查找和归并排序
    如有错误,请大佬指正,谢谢!前言二分查找和归并排序在c语言的算法学习中尤为重要,学会掌握这两种方法可以帮助我们解决数组排序和数组某元素查找的问题,尤其是在处理数据较多的时候。目录文章目录前言一、介绍一下二分查找和归并排序的概念和优点二、二分查找的实现三.归并......
  • 常用的排序算法的时间复杂度
    以下是常见排序算法的时间复杂度对比表,包含了最优、平均和最坏情况下的时间复杂度:排序算法最优时间复杂度平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n)O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(n²)O(1)不稳定插入排序O(n)O(n²)O(n²)O(1)稳定归并排序O(nl......
  • 二维数组 手动排序
    <template><div><el-dialogv-bind="$attrs"v-on="$listeners"@open="onOpen"@close="onClose":title="title"width="800px">......