【问题标题】:Replace value with np.where and create an integer用 np.where 替换值并创建一个整数
【发布时间】:2020-08-05 15:19:55
【问题描述】:

我有一个这样的列表:

my_list = ['apple', 'orange', 'banana']

我正在使用np.where 将“banana”替换为整数“5”:

my_list = np.where(my_list=='banana', 5, my_list)

但输出是

>> ['apple', 'orange', '5'] 

我需要

>> ['apple', 'orange', 5] 

我该怎么做?

【问题讨论】:

  • 您正在使用 numpy 数组。 Numpy 的基本原则之一是“NumPy 数组中的元素都必须具有相同的数据类型,因此在内存中的大小相同。例外:一个可以有(Python,包括 NumPy)的数组对象,从而允许不同大小元素的数组。” (来自Numpy docs
  • 好吧,我不知道,这解决了我的问题。我只是要将所有内容都转换为数字(表示为 str),然后将整个数组转换为整数。谢谢。
  • 如果没有其他问题,您应该选择一个答案以从未回答队列中删除您的问题。对于帮助过你的人来说,点赞也是一个不错的奖励。

标签: python python-3.x python-2.7 numpy


【解决方案1】:

可以用地图函数代替吗..

my_list = ['apple', 'orange', 'banana']
list(map(lambda x:5 if x=='banana' else x, my_list))

【讨论】:

    【解决方案2】:

    既然您使用的是 python 列表,请坚持使用 python。如果您想要混合数据类型,这尤其是一个好主意。 np.where 在循环遍历 python 对象数组时不会特别有效。这是一个 numpy 解决方案:

    my_list = [5 if x == 'orange' else x for x in my_list]
    

    顺便说一句,您可以使用类似的理解创建my_list 包含'orange' 的索引列表,例如np.where 的1-arg 形式:

    indices = [i, for i, x in enumerate(my_list) if x == 'orange']
    

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 1970-01-01
      • 2021-04-30
      • 2020-11-14
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2020-02-02
      相关资源
      最近更新 更多