标签: python-itertools

python itertools:如何掷N个骰子?

我可以使用如下循环迭代 1、2 或 3 个 6 面骰子的所有组合:

for a in range(1, 7):  # one die
  sum = a
  dosomething(sum)

for a in range(1, 7):  # two dice
  for b in range(1, 7):
    sum = a + b
    dosomething(sum)

for a in range(1, 7):    # three dice
  for b in range(1, 7):
    for c in range(1, 7):
      sum = a + b + c
      dosomething(sum)
Run Code Online (Sandbox Code Playgroud)

如何使用 itertools 对 N 个骰子执行此操作?

python python-itertools

1
推荐指数
1
解决办法
614
查看次数

从两个字符串生成所有可能的字符串,并在 python 中保持位置

给出两个词:

AT
TC
Run Code Online (Sandbox Code Playgroud)

我想生成所有可能的组合(不确定组合是否适用于此处),这些组合可以通过逐一替换这两个字符串的字符来生成,结果是:

AT
TT
AC
TC
Run Code Online (Sandbox Code Playgroud)

编辑:

我试过了:

from itertools import product
ref = "ACGT"
snp = "TGCA"
prod = product(ref,snp)
for p in prod:
    print p
Run Code Online (Sandbox Code Playgroud)

但结果是:

('A', 'T')
('A', 'G')
('A', 'C')
('A', 'A')
('C', 'T')
('C', 'G')
('C', 'C')
('C', 'A')
('G', 'T')
('G', 'G')
('G', 'C')
('G', 'A')
('T', 'T')
('T', 'G')
('T', 'C')
('T', 'A')
Run Code Online (Sandbox Code Playgroud)

不是我要找的。我期待类似的结果(每个结果应该与输入的长度相同):

ACGT
TCGT
AGGT
ACGA
....
Run Code Online (Sandbox Code Playgroud)

python list python-itertools python-2.7

1
推荐指数
1
解决办法
1542
查看次数

python pandas 创建数据框连胜

我需要创建“连胜”专栏。例如,我有如下数据。具有最大值的列是获胜者。

AA      BB      CC
5.95    5.95    0
0       -2.35   2.35
-0.6    -0.6    -0.6
-2.35   2.35    0
-1.6    1.6     -1.6
-1.25   1.25    1.25
1.85    0       -1.85
1.3     0       -1.3
-1.7    1.7     -1.7
0       0.25    0.25
Run Code Online (Sandbox Code Playgroud)

并需要创建“连胜;连续获胜多少次”列,如下所示。

AA      BB      CC      CW_AA   CW_BB   CW_CC
5.95    5.95    0       1       1       0
0       -2.35   2.35    0       0       1
-0.6    -0.6    -0.6    1       1       2
-2.35   2.35    0       0       2       0
-1.6    1.6     -1.6    0       3       0
-1.25   1.25    1.25    0       4       1
1.85    0       -1.85 …
Run Code Online (Sandbox Code Playgroud)

python python-itertools pandas cumsum pandas-groupby

1
推荐指数
1
解决办法
278
查看次数

python itertool组合列表不完整

我有一个包含 11 个元素的列表,我需要其中长度为 4 的所有可能的元组。于是我在Itertools中找到了这个函数combinations

然而,它只提供 210 个元组,而不是 11^4 = 14641。我检查了该print函数,发现其中许多元组丢失了。

我能做什么,或者有什么问题?

atom = [0, 5, 6, 12, 10, 13, 11, 9, 1, 2]
atoms = list(itertools.combinations(atom,4))
Run Code Online (Sandbox Code Playgroud)

python combinations python-itertools

1
推荐指数
1
解决办法
1741
查看次数

仅生成数字列表的连续组合

我有一个 python 列表 [1,2,3,4,5,6]。我想生成长度为 2、3、4 和 5 的所有可能组合。我使用 itertools.combinations 来生成组合,但它不仅仅生成连续组合。例如,长度为 2 的组合应仅为 [1, 2]、[2, 3]、[3, 4]、[4, 5]、[5, 6]。有没有比下面的代码更快的生成方法?

for start, end in combinations(range(len(lst)), 2):
    if end - start <= 4 and end-start >= 1:
        print(lst[start:end+1])
Run Code Online (Sandbox Code Playgroud)

python python-itertools python-2.7 python-3.x

1
推荐指数
1
解决办法
1157
查看次数

Python,压平丑陋的嵌套 for 循环

我想将多个数据文件通过两个模块来处理它们,使用每个模块的多个参数上的多个设置的每种组合。最明显的方法是使用嵌套的 for 循环,但是当您达到 7 个以上的嵌套 for 循环时,就不行了。我想让这个比那个更优雅。

我已经读过几个非常相似的问题,但是虽然这个问题表明我可能想使用 itertools,但它只迭代数字序列,而我想迭代作为字典中的值包含的字符串列表;另一个揭示了我想要的叫做笛卡尔积,但不是如何从字典值中得到它;虽然这个组合了笛卡尔积中的列表字典,但我希望输出是如上一个链接问题中的列表列表,而不是字典列表。

在:

video = ["It's Friday.mp4",'Hot Koolaid.mov','The Water Buffalo Song.mp4']
CC = {'size':['6','10','14'],'font':['Courier New'],'color':['black','white'],'language':['English']}
Noise = {'CRT':['speckles','rising stripes','no signal'],'sound':['white','crackle']}
Run Code Online (Sandbox Code Playgroud)

出去:

[['It's Friday.mp4','6','Courier New','black','English','speckles','white'], 
 ['Hot Koolaid.mov','6','Courier New','black','English','speckles','white']
 ...
 ['The Water Buffalo Song.mp4','14','Courier New','white','English','no signal','crackle']]
Run Code Online (Sandbox Code Playgroud)

我很确定我想使用itertools,并且我想要制作的是列表的笛卡尔积。我认为目前最困难的事情是从字典中提取这些列表并将其元素的组合放入列表中。

_________编辑:____________

在检查我随后接受的答案的过程中,我发现将所有参数都放在列表中(对于我的目的而言)很重要,即使只考虑一个值;不带方括号的字符串将一次迭代一个字符。

丑陋的嵌套 for 循环如下所示:

for vid in video:
    for siz in CC['size']:
        for fon in CC['font']:
            for col in CC['color']:
                for lan in CC['language']:
                    for crt in Noise['CRT']:
                        for …
Run Code Online (Sandbox Code Playgroud)

python dictionary list cartesian-product python-itertools

1
推荐指数
1
解决办法
767
查看次数

Python itertools 不重复的排列

我有一个字符串显示 mxn 网格中的步骤,就像这个问题: https ://leetcode.com/problems/unique-paths/

step = 'DDRR'
Run Code Online (Sandbox Code Playgroud)

D 表示“向下”,R 表示“向右” 我想显示无需替换的排列,我发现 Python 内置了 itertools。但是它说:

元素根据其位置而不是其值被视为唯一。因此,如果输入元素是唯一的,则不会有重复值。

因此,当我使用 itertools.permutation(step,4) 时,它包含许多重复。

>>> itertools.permutations(step,4)
('D', 'D', 'R', 'R')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'D', 'R', 'R')
('D', 'D', 'R', 'R')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('D', 'R', 'D', 'R')
('D', 'R', 'R', 'D')
('R', 'D', 'D', 'R')
('R', 'D', 'R', 'D')
('R', 'D', 'D', 'R')
('R', 'D', 'R', …
Run Code Online (Sandbox Code Playgroud)

python permutation combinatorics python-itertools

1
推荐指数
1
解决办法
3811
查看次数

Python 使用 itertools 查找所有组合/排列(带替换)

我确定这是我错过的重点。简单代码:

from itertools import combinations_with_replacement

p1 = combinations_with_replacement("2357",3)
y = [''.join(i) for i in p1]
print (y)
Run Code Online (Sandbox Code Playgroud)

产生: ['222', '223', '225', '227', '233', '235', '237', '255', '257', '277', '333', '335' , '337', '355', '357', '377', '555', '557', '577', '777']

我正在寻找从 4 位数字中提取 3 位的所有可能方法 - 顺序很重要。就我而言,由于 557 具有相同的数字,因此不会返回 755。

我正在寻找: ['222','223','232' (new), '225', 252' (new) ] 等

目前,combinations_with_replacement 的使用拒绝先前已绘制数字的序列。我可能需要似乎缺少的“排列”(但带有替换)。

我在看什么?

干杯

python python-itertools

1
推荐指数
1
解决办法
74
查看次数

Itertools 多个列表的组合,每个列表选择 n 个元素

我需要组合一个列表列表,例如在每个列表中选择 n 个元素

a=[[1,2,3,4,5],[6,7,8,9,10]]
n1=2
n2=3
Run Code Online (Sandbox Code Playgroud)

所以我的结果可能是这样的:

r=[[1,2,6,7,8],[1,2,6,7,9],...,[4,5,7,8,9],[4,5,8,9,10]]
Run Code Online (Sandbox Code Playgroud)

有什么干净的方法可以做到吗?或者我应该将列表分成更小的大小并使用 for 循环来调用 itertools?

python combinations python-itertools

1
推荐指数
1
解决办法
867
查看次数

将元素分组到列表中

我想根据索引将元素分组到列表列表中,从数据中的第一个位置开始,直到下一个 False。这就是一个分组。继续直到最后一个元素。

data = ['a','b','c','d','e','f'] 
indexer = [True, True, False, False, True, True]
Run Code Online (Sandbox Code Playgroud)

结果将是:

[['a','b','c'], ['d'], ['e','f'] ]
Run Code Online (Sandbox Code Playgroud)

itertools groupby 是正确的解决方案吗?我对如何实现它有点困惑。

python python-itertools python-3.x

1
推荐指数
1
解决办法
88
查看次数