【问题标题】:In a list, 1 if it fulfills condition 1, 0 if it fulfills condition 2, ignore it if it does not fulfill both在列表中,如果满足条件1则为1,如果满足条件2则为0,如果都不满足则忽略它
【发布时间】:2021-02-28 18:01:47
【问题描述】:

我现在有一个这样的列表。

gen = ["f", 'M', "female", "Male", "male", "F", "m", "m", "male", "Female", "x"]

由于他们可能是不同的输入格式,女性可能显示为“F”、“f”、“女性”或“女性”,男性可能显示为“M”、“m”、“男性”或列表中的“男性”。我们如何将列表变成一个新的性别列表,称为“gen2”,只有 0 和 1,0 代表女性,1 代表男性。如果列表中还有其他元素,就假设它是无效的,然后在新列表中忽略它?

我试过了:

n=0
gen2=[]
for i in gen:
    s=print(gen[n][0]==str.lower('F'))
    if s is True:
        gen2.append(0)
        n=n+1
    elif s is False:
        gen2.append(1)
        n=n+1

print(gen2)

预期的输出将是

[0, 1, 0, 1, 1, 0, 1, 1, 1, 0]

【问题讨论】:

  • print 总是返回 None。不要将它用于逻辑链。
  • 您可以制作两个列表。您能想到的所有可能输入中的一个表示女性输入,另一个表示相同的输入,但用于男性输入。如果您使用变量input 作为用户输入,您可以执行基本的if input in list:,这将根据您选择的列表返回真或假,否则返回其他条件。

标签: python list


【解决方案1】:
gen2=[]
for i in gen:
    if i[0].lower() == "f":
        gen2.append(0)
    else:
        gen2.append(1)

print(gen2)

【讨论】:

    【解决方案2】:

    这个代码可以很容易地回答这个问题

    gen = ["f", 'M', "female", "Male", "male", "F", "m", "m", "male", "Female", "x"]
    gen2=[]
    for i in gen:
        print(i.lower())
        if i.lower() == 'f' or i.lower() == 'female':
            gen2.append(0)
        elif i.lower() == 'm' or i.lower() == 'male':
            gen2.append(1)
    print(gen2)
    

    【讨论】:

      【解决方案3】:

      print 总是返回None——它不适合在这样的逻辑中使用。此外,不需要n 和i——你已经有了i 的元素(可能只使用i 作为索引,不过——更喜欢s、x 或e表示列表中的任意元素)。

      您可以使用一个小型查找表来执行转换,然后在列表推导中过滤和翻译:

      >>> gender_to_binary = dict(m=1, M=1, f=0, F=0)
      >>> [gender_to_binary[x[0]] for x in gen if x and x[0] in gender_to_binary]
      [0, 1, 0, 1, 1, 0, 1, 1, 1, 0]
      

      if x 可防止空迭代(foo is True 几乎不需要,只需foo 就足够了,并且可以清晰地读取)。

      如果您的逻辑是匹配必须在"m"/"male"/"f"/"female" 不区分大小写,则更精确:

      >>> gender_to_binary = dict(m=1, male=1, f=0, female=0)
      >>> [gender_to_binary[x.lower()] for x in gen if x.lower() in gender_to_binary]
      [0, 1, 0, 1, 1, 0, 1, 1, 1, 0]
      

      【讨论】:

        【解决方案4】:

        这不是有效的方法,但您可以使用两个列表推导

        gen = ["f", 'M', "female", "Male", "male", "F", "m", "m", "male", "Female", "x","y"]
        
        a=[0  if x.lower().startswith('f') else 1 if x.lower().startswith('m') else None for x in gen]
        [i for i in a if i != None]
        

        在列表理解中使用if、else if 和else。使用字符串方法 lower 和 startswith 并在第二个列表理解中删除 None 项目。 输出:

        [0, 1, 0, 1, 1, 0, 1, 1, 1, 0]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-27
          • 2012-10-27
          • 1970-01-01
          • 2017-01-13
          • 2019-03-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多