【发布时间】:2018-01-17 00:08:24
【问题描述】:
对 python 比较陌生,我有一个似乎无法轻松解决(或完全理解)的问题 运行以下代码:
(" ".join(map(str,np.int32(((np.arange(14))))))).split()
产生以下内容:
Out[54]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']
而
(" ".join(map(str,np.int32(((np.arange(15))))))).split()
产生以下
Out[2]:
['0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14']
我希望能够使用少于 15 个数字的列而不是行的形式创建一个列表。
在这方面有人可以提供帮助吗?
原因是 QtWidgets.QCombobox.additems('list of strings') 在 14 但不是 15(或更大)的情况下会追逐控制台/内核。
(在 windows 7 上使用 spyder 3.6 / ipython 3.6.2 / anaconda (4.4, 64bit) / pyqt 5.6.2)
编辑 1:
非常感谢您的回复.. 但是.. map(str, np.int32(np.arange(14))) 产生 Out[4]: <map at 0xba4f2b0>。
突然之间,列表中的项目少于 15 个。 pyqt/QCombobox 的问题似乎越来越像一些随机错误(当组合框太多时......可能是另一个问题。
【问题讨论】:
-
两个列表具有相同的“形式”,只是 IPython 在一行中显示的内容不同。
-
在 Python 3.x 中,
map返回一个映射对象,而不是一个序列,除非具体化...改用简单而明确的列表理解(不需要 numpy,加入然后拆分回字符串等...),例如:items = [str(i) for i in range(14)]并将其传递给您的组合框 -
“突然之间,列表中的项目少于 15 个。”也许您更改了代码中的某些内容。如果没有一个最小的例子,我们永远不会知道 PyQt 中是否存在错误,或者您是否不小心修复了程序中的错误以及如何修复。这使得这个问题对其他人不是很有用。
-
@JonClements。 FWIW,
QCombobox.additems适用于任何类型的可迭代对象,包括map对象。我尝试了问题中显示的所有示例,它们对我来说都很好。似乎是PEBKAC的经典案例。
标签: python list numpy pyqt ipython