我有一个整数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) ]
提前致谢
答案 0 :(得分:2)
在互动环节中:
使用简单的x
,并且对于初始迭代循环:
In [461]: x=[(1,2)]
In [462]: x[0]=x[0][0],'A'
In [463]: x
Out[463]: [(1, 'A')]
请注意,x[0]
元组已被新元组(x[0][0],'A')
替换,第一个元组加上字母。您的文字说明听起来好像要将其更改为('A',2)
,然后更改为('A','B')
。
2,j
迭代的内容是什么?你真的想要range(2)
吗?
In [465]: list(range(0,1))
Out[465]: [0]
==============
如果您有列表列表,则替换子列表元素很简单:
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()
来简化它:
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]