2015-11-01 23 views
0

我有一個數組,看起來像這樣:轉換字符串數組成一和零數組

x = ['Green', 'Red', 'Red', 'Red', 'Green', ...] 

我想創建一個新的排列Y,因此:

y = [1, 0, 0, 0, 1, ...] 

我曾嘗試以下,它不工作:

for n in x: 
    if x[n] == 'Red': 
    p = 0 
    if x[n] == 'Green': 
    p = 1 
    y.append(p); 

TypeError: list indices must be integers, not str

+0

在直接使用'for var in list'進行迭代時,可以直接使用'var'。因此,你應該做'n =='Red'' –

回答

1

for v in <sequence>迭代元素<序列>

使用n代替x[n],不要忘記用空列表來初始化y

y = [] 
for n in x: 
    if n == 'Red': 
     p = 0 
    if n == 'Green': 
     p = 1 
    y.append(p) 

如果您在x有2個不同的單詞(綠色和紅色),那麼你可以用一個列表簡化這一理解像

y = [1 if == 'Green' else 0 for n in x] 

甚至

y = [int(n == 'Green') for n in x] 

否則創建一個字典,地圖顏色名稱對應的數字e.g

numbers = { 
    'Red': 0, 
    'Green': 1, 
    # More colors 
} 

y = [numbers[n] for n in x] 
2

您可以創建所需的映射關係的字典,地圖,爲您的list。如果你有很多案例,這更加靈活。

In [8]: x = ['Green', 'Red', 'Red', 'Red', 'Green'] 

In [9]: d = {'Green':1, 'Red':0} 

In [10]: map(d.get, x) 
Out[10]: [1, 0, 0, 0, 1]