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(" ") |