【问题标题】:How to replace string with an int in list in python?python - 如何用python列表中的int替换字符串?
【发布时间】:2021-01-25 18:26:16
【问题描述】:

在以下列表中,我想将“Sun”替换为 0,将“Rain”替换为 1。我该怎么做?

precipitation = ["Sun", "Rain", "Rain", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Rain", "Rain", "Rain", "Rain"]

for i in precipitation:  
  if precipitation[i] == "Sun":
    precipitation[i] = 0
  else:
    precipitation[i] = 1

【问题讨论】:

  • for i in precipitation 为您提供列表中的实际项目,而不是它们各自的索引。最简单的代码修复是for i in range(len(precipitation)):,它将让i 获取索引的值。也有更简单的解决方案,但这个最符合您现在的解决方案。
  • [0 if x!="Sun" else 1 for x in precipitation]
  • Shivam,你能展示一下你的新代码吗?正如@TomRon 指出的那样,还有更简单的解决方案。

标签: python python-3.x string list integer


【解决方案1】:

您可以使用列表推导来做到这一点:

precipitation = [0 if x == 'Sun' else 1 for x in precipitation]

【讨论】:

  • 我猜提问者想要 0 代表“太阳”。
  • @JenilDave 改变了它。谢谢!
【解决方案2】:

试试这个...

precipitation = ["Sun", "Rain", "Rain", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Sun", "Rain", "Rain", "Rain", "Rain"]

for i in range(len(precipitation)):  
  if precipitation[i] == "Sun":
    precipitation[i] = 0
  else:
    precipitation[i] = 1
         
print(precipitation)

【讨论】:

    【解决方案3】:

    @Gabip 的答案的详细说明,使用布尔值在数字上表示为 0 和 1 的事实:

    [int(x=='Sun') for x in precipitation]
    

    【讨论】:

      【解决方案4】:

      添加到已经存在的答案,使用map()

      list(map(lambda x: 0 if x=='Sun' else 1,a))
      

      您可以尝试这样做来避免循环和列表推导

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 2010-10-20
        • 2019-01-30
        • 2019-02-26
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多