在2D矩阵python中选择元素并指定字符
我有一个整数2D数组,我试图替换一个字符而不是 二维数组中的整数,但输出对我来说很混乱,我找不到 代码中的命令错误在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
(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]