繁体   English   中英

在列表中,如果满足条件1则为1,如果满足条件2则为0,如果都不满足则忽略它

[英]In a list, 1 if it fulfills condition 1, 0 if it fulfills condition 2, ignore it if it does not fulfill both

我现在有一个这样的清单。

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)

并且预期的 output 将是

[0, 1, 0, 1, 1, 0, 1, 1, 1, 0]
gen2=[]
for i in gen:
    if i[0].lower() == "f":
        gen2.append(0)
    else:
        gen2.append(1)

print(gen2)

print总是返回None ——它不适合在这样的逻辑中使用。 此外,不需要ni ——你已经有了带有i的元素(可能只使用i作为索引,尽管——更喜欢sxe来表示列表中的任意元素)。

您可以使用执行转换的小型查找表,然后在列表理解中过滤和翻译:

>>> 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]

可以使用此代码轻松回答

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)

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

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]

在列表理解中使用ifelse ifelse 使用字符串方法lowerstartswith并在第二个列表理解中删除None项目。 Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM