python中矩阵的问题
昨天,我试图用python解决一个问题,我遇到了一些非常奇怪的事情:python中矩阵的问题,python,list,Python,List,昨天,我试图用python解决一个问题,我遇到了一些非常奇怪的事情: # create matrix for i in range(N): tmp.append(0) for i in range(N): marker.append(tmp) # create sum of 2 first cards for i in range(N) : for j in range(N): if i != j and marker[i][j] == 0:
# create matrix
for i in range(N):
tmp.append(0)
for i in range(N):
marker.append(tmp)
# create sum of 2 first cards
for i in range(N) :
for j in range(N):
if i != j and marker[i][j] == 0:
comCard.append(deck[i]+deck[j])
taken[deck[i]+deck[j]] = [i,j]
marker[i][j] = 1
marker[j][i] = 1
我的想法是,我想计算牌组中每对牌的所有可能总和(这些牌需要不同),因此我认为使用标记可以避免再次计算相同的2张牌。例如:甲板[1]+甲板[2]和甲板[2]+甲板[1]。但这些台词并没有发挥应有的作用:
marker[i][j] = 1
marker[j][i] = 1
我可以推荐使用标准python模块的另一种方法:
# suppose this is a deck - list of cards (I don't know how to mark them :)
>>> deck = ['Ax', 'Dy', '8p', '6a']
>>> from itertools import combinations
# here's a list of all possible combinations of 2 different cards
>>> list(combinations(deck, 2)))
[('Ax', 'Dy'), ('Ax', '8p'), ('Ax', '6a'), ('Dy', '8p'), ('Dy', '6a'), ('8p', '6a')]
您可以使用此列表:检查一些组合,等等
我建议大家注意这个库——对于这种类型的计算来说,它真是太棒了 您只使用了相同的
tmp
实例。这就是它不起作用的原因。您需要每行的新副本添加到矩阵中
这可以通过以下方式实现:
marker.append(list(tmp))
此外,有一天您可能会从使用True
和False
而不是0
和1
中获益。因此,矩阵的初始化可能如下所示:
tmp = list()
marker = list()
for i in range(N):
tmp.append(False)
for j in range(N):
marker.append(list(tmp))
这样,当您尝试标记[i][j]=True
时,只有索引(i,j)会受到影响
这就是说,它为这类问题提供了一个更适合的工具(排列列表)。您所有的行都指向同一个列表;您使用
tmp
初始化的那个。这可能是重复的,我的人!我只是个新手谢谢你的帮助