2012-07-03 172 views
0

因此,我正在讀取一個包含兩列的CSV文件,然後獲取所有這些元素的產品。嘗試將元組列表轉換爲列表列表

我想要做的是將他的產品從元組列表轉換爲列表列表。我最終想要用逗號將每個元組合成一個字符串。這裏是我的代碼:

rowa = [] 
rowb = [] 

for row in csvfile: 
    if row[0] != "": 
     rowa.append(row[0]) 
    if row[1] != "": 
     rowb.append(row[1]) 
wordlist = list(product(rowa, rowb)) 

我的僞代碼是這樣的:

for x in wordlist: 
    x = list(x) 
    x.join(" ") 

print wordlist應該彈出一個字符串列表,這將是老的元組,變成了一個清單,然後用結合在一起空間

回答

6

join method工作相反;將其稱爲空間字符串:

for x in wordlist: 
    " ".join(x) 

它適用於任何序列,因此不需要在這裏將元組轉換爲列表。

請注意,您可以免去!= ""測試您的專欄;空字符串被認爲是布爾值false還有:

for row in csvfile: 
    if row[0]: 
     rowa.append(row[0]) 
    if row[1]: 
     rowb.append(row[1]) 

最後,因爲你已經在單詞表迭代,只要把它的發電機以及與呼叫列表完全免除。

wordlist = [" ".join(x) for x in product(rowa, rowb)] 
+0

謝謝!很有幫助。 –

0

很多猜測你的意思,但你想壓縮兩個列表?

wordlist = zip(rowa, rowb) 
1

無需創建中間列表

rowa = [] 
rowb = [] 

for row in csvfile: 
    row0,row1 = row[0].lower(),row1.lower() 
    if row0 != row1: 
     if row[0] != "": 
      rowa.append(row0) 
     if row[1] != "": 
      rowb.append(row1) 
wordlist = product(rowa, rowb) 

result = [" ".join(x) for x in wordlist] 

發電機表達應該做的工作

編輯 附加要求

+0

另外,將所有這些值設爲小寫字母的好方法是什麼?我嘗試了row [0] .lower,但它似乎以某種方式將其轉換爲字符串方法,而不是將所有內容都設置爲小寫。 –

+0

令人驚訝的'rowa.append(row [0] .lower())'應該做這個工作 –

+0

我需要在這之前做,但是,因爲我添加了另一個條件,如果行[0]!= row [1]:和我希望所有事情都事先都是一樣的。 –