在Python中规范化数组

时间:2013-11-29 00:22:27

标签: python

我有一个数组

ar= [2, 3, 45 , 5556, 6, 'empty', 4]

我想对此数组进行规范化,以便稍后进行绘制。

0:2
1:3
2:45
3: 5556
4: 6
5: 0  # not "empty" anymore
6: 4

newAr = {if (ar[i] != 'empty') ar[i] : i for i in range(len(ar))
         else: ar[i] = 0 }

我试过这种方式,如何将每个'empty'元素转换为零的条件来规范化这个数组。

更新 主要目标是规范化此阵列。 Ax X:索引,Ax Y代表值。

如果我们有重复项,我们怎样才能确保我们有正确的参考资料。

 ar= [2, 3, 45, 4 , 5556, 6, 'empty', 4]

  0:2
    1:3
    2:45
    3: 5556
    4: 6
    5: 0  # not "empty" anymore
    6: 4

2 个答案:

答案 0 :(得分:4)

这有效:

ar = [2, 3, 45, 5556, 6, 'empty', 4]
new_ar = [0 if x == 'empty' else x for x in ar]

的产率:

[2, 3, 45, 5556, 6, 0, 4]

我在列表推导的前面中使用了Python ternary operator,而不是之后。

修改:如果根据评论需要一套,那么只需在理解中使用{}代替[]

new_ar = {0 if x == 'empty' else x for x in ar}

这将自动确保唯一值。

答案 1 :(得分:1)

In [91]: ar = [2, 3, 45, 5556, 6, 'empty', 4]

In [92]: [i if not isinstance(i, str) else 0 for i in ar]
Out[92]: [2, 3, 45, 5556, 6, 0, 4]

OR

In [93]: [i if i!='empty' else 0 for i in ar]
Out[93]: [2, 3, 45, 5556, 6, 0, 4]

根据您更新的帖子,这应该处理相应的重复删除:

In [105]: d = {n if n!='empty' else 0:i for i,n in enumerate(ar)}

In [106]: newList = [None]*len(d)

In [107]: for n,i in d.iteritems(): newList[i] = n

In [108]: newList
Out[108]: [2, 3, 45, 5556, 6, 0, 4]