重写以下C代码的pythonic方法是什么?
int a[16][4];
int s[16] = {1,0,2,3,0,1,1,3,3,2,0,2,0,3,2,1};
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) {
int diff = i ^ j;
int val = s[i] ^ s[j];
++a[diff][val];
}
}
答案 0 :(得分:1)
以下是一些等效的Python代码:
a = [[0]*4 for i in range(16)]
s = [1,0,2,3,0,1,1,3,3,2,0,2,0,3,2,1]
for i in range(16):
for j in range(16):
diff = i ^ j
val = s[i] ^ s[j]
a[diff][val] += 1
答案 1 :(得分:0)
数组由
初始化In [1]: a=[[0]*4]*16
In [2]: a
Out[2]:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
然后是第二个数组(列表):
In [5]: s = [1,0,2,3,0,1,1,3,3,2,0,2,0,3,2,1]
Python中的按位运算符与C类似。正如FJ已经发布它的情况一样。
答案 2 :(得分:0)
<强>实施强>
a = [[0]*4 for _ in range(16)]
s = [1,0,2,3,0,1,1,3,3,2,0,2,0,3,2,1]
from itertools import product
for diff, val in ((i ^ j, s[i] ^ s[j])
for i, j in product(range(16), repeat = 2):
a[diff][val] += 1