2017-08-09 105 views
-4

相对较新的Python我有我似乎无法轻易解决的一个问题(或完全理解) 运行跟随着代码: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个数字的行。

有没有人有任何帮助提供这个?

原因是,如果是14而不是15(或更大),QtWidgets.QCombobox.additems('字符串列表')会使控制台/内核出现乱码。

(使用spyder的3.6/IPython的3.6.2 /安纳康达(4.4,64位)/ PyQt的5.6.2上的窗口7)

EDIT 1: 非常感谢您的答复.. ..然而产生map(str, np.int32(np.arange(14)))Out[4]: <map at 0xba4f2b0>

突然它在列表中少于15个项目。似乎越来越像pyqt/QCombobox的问题是一些随机错误(当有太多的组合框或其他... ..可能是另一个问题。)

+1

这两个列表都具有相同的“表单”,这只是IPython在不适合一行时显示的不同。 – Goyo

+0

在Python 3.x中,'map'返回一个地图对象,而不是一个序列,除非物化......使用简单明确的列表理解来代替(不需要numpy,加入然后分割字符串等等),例如: 'items = [str(i)for i in range(14)]'并将其传递给你的组合框 –

+0

“突然它在列表中少于15个项目。”也许你在代码中改变了一些东西。没有一个简单的例子,我们永远不会知道PyQt中是否存在错误,或者您是否意外地修复了程序中的错误以及错误。这使得这个问题对其他人不太有用。 – Trilarion

回答

1

首先,你可以摆脱很多括号你可以这样写:

(" ".join(map(str,np.int32(((np.arange(14))))))).split() 

(" ".join(map(str, np.int32(np.arange(14))))).split() 

" ".join().split()是完全相反的,所以你可以摆脱他们太不影响

map(str, np.int32(np.arange(14)) 

你看到不同的是,15号列表是显示为行,而14号的名单显示为列。在内部,没有区别。

"\n".join(map(str, np.int32(np.arange(14))) 

如果你坚持冒号和括号,你可以做这样的:

print("[%s]" % ",\n ".join(map(str, np.int32(np.arange(14))))) 
当你想在新的一行显示每个号码,你可以简单地使用换行符加入号码
+0

事实上 - 使用numpy和加入和分割的东西都可以......'item = [str(i)for i in range(14)]'应该足够了 –

+0

或者,如果你从一个numpy数组开始,'list(np.arange(14).astype(str))' –