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:

昨天,我试图用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:
          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
初始化的那个。这可能是重复的,我的人!我只是个新手谢谢你的帮助