2015-11-01 81 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]