Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在2D矩阵python中选择元素并指定字符_Python_Arrays_Python 2.7_Python 3.x_Pycharm - Fatal编程技术网

在2D矩阵python中选择元素并指定字符

在2D矩阵python中选择元素并指定字符,python,arrays,python-2.7,python-3.x,pycharm,Python,Arrays,Python 2.7,Python 3.x,Pycharm,我有一个整数2D数组,我试图替换一个字符而不是 二维数组中的整数,但输出对我来说很混乱,我找不到 代码中的命令错误 (1, [(1, 'A'), (3, 4), (5, 6), (6, 5), (9, 2), (4, 9), (4, 2), (2, 9)]) (3, [(1, 'A'), (3, 'C'), (5, 6), (6, 5), (9, 2), (4, 9), (4, 2), (2, 9)]) (2, [(1, 'A'), (3, 'C'), (5, 6), (6, 5), (9, 2

我有一个整数2D数组,我试图替换一个字符而不是

二维数组中的整数,但输出对我来说很混乱,我找不到

代码中的命令错误

(1, [(1, 'A'), (3, 4), (5, 6), (6, 5), (9, 2), (4, 9), (4, 2), (2, 9)])
(3, [(1, 'A'), (3, 'C'), (5, 6), (6, 5), (9, 2), (4, 9), (4, 2), (2, 9)])
(2, [(1, 'A'), (3, 'C'), (5, 6), (6, 5), (9, 2), (4, 9), (4, 2), (2, 'B')])
这是代码

  import numpy as np
  x = [ (1,2),(3,4),(5,6),(6,5),(9,2),(4,9),(4,2),(2,9) ]
  list (x)
  #print x
  #x[4] = x[0][1], 'A'
  #print x

  #x =[1,2,3,4,5,6,7,8,9]
  r=len(x)
  i=0
  j=0
  #print "length",r
  for i in range(0,r):
   for j in range(0,1):
    if x[i][j]==1:
      x[i]=x[i][j],'A'
      print (x[i][j], x)

    if x[i][j] == 2:
       x[i] = x[i][j], 'B'
       print (x[i][j], x)

    if x[i][j] == 3:
      x[i]=x[i][j] , 'C'
      print (x[i][j], x)

print i,j
例如,第一个2D(1,2)应替换为“A”

预期的结果是

将此流替换为等效字符,例如,在此条件下,输出为: x=[(B,D)、(C,D)、(E,F)、(F,E)、(I,B)、(D,I)、(D,B)、(B,I)]


在互动会话中提前感谢

使用简单的
x
,对于初始迭代循环:

请注意,
x[0]
元组已被一个新元组取代,
(x[0][0],'a')
,第一个元组元素加上字母。您的文字描述听起来像是要将其更改为
('A',2)
,然后再更改为
('A','B')

第二,
j
迭代是什么?您真的想要
范围(2)

==============

如果有列表列表,则替换子列表元素很容易:

In [468]: x=[[1,2]]
In [469]: i=0
In [470]: for j in range(2):
     ...:     if x[i][j]==1:
     ...:         x[i][j]='A'
     ...:     elif x[i][j]==2:
     ...:         x[i][j]='B'
     ...:         
In [471]: x
Out[471]: [['A', 'B']]
对元组列表执行类似的操作更为棘手,因为您不想更改元组的元素;你必须替换整个元组。事实上,将元组临时更改为列表可能更简单:

In [476]: x=[(1,2)]
In [477]: i=0
In [478]: x1 = list(x[i])
     ...: for j in range(2):
     ...:     if x1[j]==1:
     ...:         x1[j]='A'
     ...:     elif x1[j]==2:
     ...:         x1[j]='B'
     ...: x[i]=tuple(x1)
In [479]: x
Out[479]: [('A', 'B')]
==========================

要应用于元组列表,如:

In [622]: x = [ (1,2),(3,4),(5,6),(6,5),(9,2),(4,9),(4,2),(2,9) ]
我可以将代码包装在函数中

In [623]: def foo(y):
     ...:     x1 = list(y)
     ...:     for j in range(len(x1)):
     ...:        if x1[j]==1:
     ...:             x1[j]='A'
     ...:        elif x1[j]==2:
     ...:             x1[j]='B'
     ...:     return tuple(x1)
     ...: 
并通过简单的列表理解将其应用于每个元组。(也可以将其编码为就地替换,但理解更美观

In [624]: [foo(y) for y in x]
Out[624]: [('A', 'B'), (3, 4), (5, 6), (6, 5), (9, 'B'), (4, 9), (4, 'B'), ('B', 9)]
我可以将其他字母改为
foo
,也可以使用
chr()
ord()
来简化它:

我可以进一步简化该职能,以便:

def foo2(y):
    return tuple(chr(j+ord('A')-1) for j in y)
甚至可以把它放在一个理解中:

[tuple(chr(j+ord('A')-1) for j in y) for y in x]

使用
print()
查看变量中的值,例如
i
j
x[i]
x[i][j]
,等等。这有助于找到问题。显示(有问题)预期结果。为什么导入numpy?解释
x[i]=x[i][j],'A'
行。你想做什么?它实际上在做什么?对不起,你的答案是在x上[(1,2)]分别>>>我想要的是在这个流上应用这个算法x=[(2,4),(3,4),(5,6),(6,5),(9,2),(4,9),(4,2),(2,9)]所以我需要将这个整数替换为字符,这取决于相等的条件,但是你正在单独处理每个元组,对吗?我只是用一个较短的列表来说明这个任务。当然你可以将该解决方案应用于较长列表的各个元素。编辑了预期的输出>>>>,但当我在inte流上应用它时它只分配了前两个元素(1,2)–hpauljDid您迭代的
i
?为了说明,我刚刚使用了
i=0
,但您将
用于范围内的i(…):…
。我得到了这个错误类型error:'int'对象不支持项分配这是代码
In [625]: def foo1(y):
     ...:     x1 = list(y)
     ...:     for j in range(len(x1)):
     ...:        x1[j] = chr(x1[j]+ord('A')-1)
     ...:     return tuple(x1)
     ...: 
In [626]: [foo1(y) for y in x]
Out[626]: 
[('A', 'B'),
 ('C', 'D'),
 ('E', 'F'),
 ('F', 'E'),
 ('I', 'B'),
 ('D', 'I'),
 ('D', 'B'),
 ('B', 'I')]
def foo2(y):
    return tuple(chr(j+ord('A')-1) for j in y)
[tuple(chr(j+ord('A')-1) for j in y) for y in x]