我设法生成了一个字符'a','b'和'c'的所有可能组合的列表(下面的代码)。现在我想添加第四个字符,可以是“d”或“f”,但不能同时使用两个字符。我怎么能实现这个目标?
items = ['a', 'b', 'c']
from itertools import permutations
for p in permutations(items):
print(p)
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
答案 0 :(得分:3)
为items2
和d
创建了一个新列表f
。假设OP需要[a,b,c,d]
和[a,b,c,f]
items1 = ['a', 'b', 'c']
items2 = ['d','f']
from itertools import permutations
for x in items2:
for p in permutations(items1+[x]):
print(p)
答案 1 :(得分:2)
@Van Peer解决方案的变体。您可以就地修改扩展列表:
from itertools import permutations
items = list('abc_')
for items[3] in 'dg':
for p in permutations(items):
print(p)
答案 2 :(得分:2)
itertools.product
适合以一种很好地概括的方式表示这些不同的群体。只需将独占元素属于传递给笛卡尔积的同一迭代。
例如,要获取包含您正在寻找的项目的列表,
from itertools import chain, permutations, product
list(chain.from_iterable(map(permutations, product(*items, 'df'))))
# [('a', 'b', 'c', 'd'),
# ('a', 'b', 'd', 'c'),
# ('a', 'c', 'b', 'd'),
# ('a', 'c', 'd', 'b'),
# ('a', 'd', 'b', 'c'),
# ('a', 'd', 'c', 'b'),
# ('b', 'a', 'c', 'd'),
# ('b', 'a', 'd', 'c'),
# ('b', 'c', 'a', 'd'),
# ('b', 'c', 'd', 'a'),
# ('b', 'd', 'a', 'c'),
# ('b', 'd', 'c', 'a'),
# ('c', 'a', 'b', 'd'),
# ('c', 'a', 'd', 'b'),
# ...
答案 3 :(得分:1)
Dim intUserInput As Integer
Dim outPut As Integer
intUserInput = TextBox1.Text
Try
If intUserInput >= 1 Then
outPut = intUserInput * ComboBox1.SelectedItem
ListBox1.Items.Add(outPut)
TextBox1.Clear()
ComboBox1.SelectedIndex = ComboBox1.SelectedIndex + 1
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
MessageBox.Show("Error")
End Try