python学习笔记--内置排列函数combinations()

一、介绍

Python itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序

二、使用

from itertools import combinations

二、举例

c = (‘e’,‘f’,‘g’,‘h’) #对元组进行combinations排列组合
for j in combinations(c,2):
print (j)
##结果为:
ef
eg
eh
fg
fh
gh

三、注意

对于字典,combinations函数只对字典的键进行排列组合
举例:

e = {‘天时’:‘好’,‘地利’:‘差’} #对字典进行combinations排列组合
for i in combinations(e,2):
print (‘也要’.join(‘%s’%s for s in i),end=“,才行!”)
##结果为
天时也要地利,才行!

combinations函数只对非重复项进行遍历
例如存在集合y={“a”, “a”, “b”}
集合会自动去重
因此

for i in combinations(y,2):
print (‘’.join(‘%s’%p for p in i))
##结果为
ab

四、LeetCode关联题目解法

leetcode1275. 找出井字棋的获胜者

moves =[[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]]

class Solution:
    def tictactoe(self, moves: List[List[int]]) -> str:
        # 3阶数独矩阵
        SUDOKU=[[6,1,8],[7,5,3],[2,9,4]]
        # 如果其中3数和为15就赢
        if 15 in [sum(k) for k in combinations([SUDOKU[i][j] for i,j in moves[::2]], 3)]:return "A"
        if 15 in [sum(k) for k in combinations([SUDOKU[i][j] for i,j in moves[1::2]], 3)]:return "B"
        return "Draw" if len(moves)==9 else "Pending"

作者:INN
链接:https://leetcode.cn/problems/find-winner-on-a-tic-tac-toe-game/solutions/757544/jian-dan-si-xing-jie-99-shu-du-mo-fang-j-oo52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。```

注意:“如果其中3数和为15就赢”,是一种常用的九宫格思路,背下即可
思路:

  1. for i,j in moves[::2]]和for i,j in moves[1::2]]分别找出A和B所走的位置对应的二维数组下标
  2. SUDOKU[i][j] 分别找出A和B所走的位置对应的SUDOKU中的数值
  3. combinations函数取出A和B所走的位置排列出来的所有长度为3的子序列
  4. sum(k)计算和是否为15
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值