2017-08-09 108 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))' –