Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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
从numpy到纯python的转换_Python_List_Python 3.x_Numpy - Fatal编程技术网

从numpy到纯python的转换

从numpy到纯python的转换,python,list,python-3.x,numpy,Python,List,Python 3.x,Numpy,我不能使用numpy,而且我很难将以下内容从numpy数组转换成纯python,并且只能使用List和List方法将特定索引中的值放置到纯python中。有什么建议吗?列列表是我需要附加到的列的索引 n = 15 board = np.array([['1'] * n] * n) for index in zero.columns: #This is the line im having trouble with board[zero.columns.index(index), ind

我不能使用numpy,而且我很难将以下内容从numpy数组转换成纯python,并且只能使用List和List方法将特定索引中的值放置到纯python中。有什么建议吗?列列表是我需要附加到的列的索引

n = 15
board = np.array([['1'] * n] * n)

for index in zero.columns: #This is the line im having trouble with
    board[zero.columns.index(index), index] = "0"
零列的例外情况:
[0,2,4,1,9,11,13,3,12,8,5,14,6,10,7]

因此,使用numpy的htis的输出将是

[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

对于
15x15
板,诸如此类。

当您想将代码从NumPy转换为普通python时,有几个问题需要解决:

>>> board = [['1'] * n for _ in range(n)]
>>> zeros = [0, 2, 4, 1, 9, 11, 13, 3, 12, 8, 5, 14, 6, 10, 7]
>>> for row, idx in zip(board, zeros):
...   row[idx] = '0'
... 
>>> pprint.pprint(board)
[['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1'],
 ['1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0'],
 ['1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1'],
 ['1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1']]
最棘手的部分是您需要一个理解列表,而不是最简单的
[['1']*n]*n
来创建初始板,因为
*
操作符实际上会创建对同一对象的重复引用。但是,您确实需要不同的行。下面是一个简单的例子,说明了这个问题:

>>> m = [['1']*3]*2
>>> m[1][2] = '0'   # I might think I changed only *one* cell
>>> m
[['1', '1', '0'], ['1', '1', '0']]
#            ^                ^
# but *two* cells appear to have changed.
>>> m[0] is m[1]
True
# because m[0] and m[1] are in fact referencing the _same_ object.

之后,您需要沿着不同的行,同时遍历零索引。这里,我就是为了这个目的而使用的。

您想用这段代码做什么?你能展示一个示例输入和预期输出吗?当然,等一下,我会更新我正在尝试实现的nqueens算法。你想让纯Python
成为一个由1个字符串组成的列表吗?如果是这样的话,你应该在你的问题中特别提到。我没有意识到我在numpy数组中有一个额外的breake,是的,我试图在不使用numpy的情况下获得相同的表示,但问题是试图索引,以便在不使用numpy的情况下将0放在正确的位置。我只做了1个,代表了没有皇后的黑板点,可以很容易地把它们做成空白的字符串,虽然它在这里工作,但是我不喜欢在嵌套列表理解中重用索引变量:有时可以方便地访问内部列表COMP中的外部索引。对于
int
版本,您可以将电路板初始化简化为
board=[[['1']]*n(适用于范围内(n)]
board=[[1]*n(适用于范围内(n)]
。这是安全的,因为每个内部列表都将是一个新列表。或者,初始化和设置零可以在单个列表comp中完成:
board=[[0如果x==零[y]否则1代表范围内的x(n)]代表范围内的y(n)]
,但我怀疑您的方法稍微快一点,因为它避免了内部循环中的测试。@PM2Ring谢谢您的评论。两者都是完全正确的。我已经更新了答案以简化初始化。关于“更新循环”——正如您所提到的,带有更新的普通旧过程循环通常比列表理解性能更好。但在这里,我必须承认,我的想法更容易理解/可读,而不是表演。“过早优化…”是的,正如我在《可读性》一书中所说的,它比次要的性能增强更重要。正如您所说,一个普通的
for
循环通常与等价的列表理解一样快,如果不快的话,那么将一个易于阅读的
for
循环构造转换为列表comp可能会带来不确定的好处。我只是在上面举了一个例子来说明这是可以做到的,但我肯定不推荐它。:)