2013-03-02 75 views
0

這是一個擴展我的previous question但以相反的順序:即,用繩子-t-c-over----,是有沒有辦法生成二進制列表,所有有效的字母有1和連字符有0從字符串到二進制列表

[0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0] 
- t - c - o v e r - - - - 

我爲來回感到抱歉,但它必須這樣下去。

回答

6
>>> s = '-t-c-over----' 
>>> lst = [0 if i == '-' else 1 for i in s] 
>>> print lst 
[0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0] 

列表比較檢查,如果字母是'-' - 如果它是,它把在列表中的0,否則它把一個1

+0

謝謝。我被迭代器卡住了,但忘記了這個簡單的方法。 – Rock 2013-03-02 06:24:13

+0

+1:我被我的寶貝卡住了:-) – Abhijit 2013-03-02 06:24:34

+0

@Abhijit好吧,我必須承認你的是一個有趣的方法';'' – Volatility 2013-03-02 06:28:15

1

您可以使用此

string = "-t-c-over----" 
[0 if i == "-" else 1 for i in string] 

Output: [0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0] 
+1

你的回答沒有增加任何新內容,也沒有命名變量來表示內置或標準的內容圖書館 – Abhijit 2013-03-02 06:30:00

+0

我真的很抱歉,但當我點擊帖子回答時,沒有答案發布到那時。但由於我的互聯網問題,需要花費太多時間才能發佈。 – 2013-03-02 06:39:37

-1

另一種選擇是使用lambda函數和map函數。

s = '-t-c-over----' 
output = map(lambda x: 0 if x == '-' else 1, s) 

編輯:顯然這在Python 3.2中不起作用,所以實際的解決方案應該是這樣的。

s = '-t-c-over----' 
output = [0 if x == '-' else 1 for x in s] 
+0

根據python版本,這不一定會創建一個列表。 – Hyperboreus 2013-03-02 07:20:31

+0

你可以更具體地瞭解哪些版本的python這不起作用? – Genzume 2013-03-03 02:03:22

+0

例如在python3.2中。有輸出是一個地圖對象,而不是一個列表。 – Hyperboreus 2013-03-03 02:05:18