关于python:如何从列表中获取所有名称组合:typeerror:”list”对象不可调用

Python - How to get all Combinations of names from a list: TypeError: 'list' object is not callable

我在尝试打印用户生成的名称列表的排列/组合时出错。

我尝试了一些来自itertools的方法,但都无法使排列或组合起作用。在连接字符串的过程中遇到其他一些错误,但当前获取的是:typeerror:"list"对象不可调用。

我知道我犯了一个简单的错误,但无法解决。请帮助!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from itertools import combinations

name_list = []

for i in range(0,20):
    name = input('Add up to 20 names.
When finished, enter"Done" to see all first and middle name combinations.
Name: '
)
    name_list.append(name)
    if name != 'Done':
        print(name_list)
    else:
        name_list.remove('Done')
        print(name_list(combinations))

我期待:1)用户在列表中添加名称2)列表打印显示列表的用户内容3)完成后,用户输入"完成":a)"完成"从列表中删除b)打印清单上剩余项目的所有组合


排列和组合是两种不同的动物。看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
>>> from itertools import permutations,combinations
>>> from pprint import pprint
>>> l = ['a', 'b', 'c', 'd']
>>> pprint(list(combinations(l, 2)))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
>>> pprint(list(permutations(l)))
[('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'),
 ('c', 'b', 'a', 'd'),
 ('c', 'b', 'd', 'a'),
 ('c', 'd', 'a', 'b'),
 ('c', 'd', 'b', 'a'),
 ('d', 'a', 'b', 'c'),
 ('d', 'a', 'c', 'b'),
 ('d', 'b', 'a', 'c'),
 ('d', 'b', 'c', 'a'),
 ('d', 'c', 'a', 'b'),
 ('d', 'c', 'b', 'a')]
>>>

对于使用组合,需要将r作为参数。此代码提供所有数字的所有组合(0到列表长度)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from itertools import combinations

name_list = []

for i in range(0,20):
    name = raw_input('Add up to 20 names.
When finished, enter"Done" to see all first and middle name combinations.
Name: '
)
    name_list.append(name)
    if name != 'Done':
        print(name_list)
    else:
        name_list.remove('Done')
        break

for i in range(len(name_list) + 1):
    print(list(combinations(name_list, i)))
    print("
"
)