测试列表中元素的长度

时间:2018-11-03 05:37:42

标签: python list

def lengthgood(x):
    for i in x:
        if len(i)<13
            return i
        else:
            pass


def makeproperlist(x):
    return x.split(',')



attendancelist=makeproperlist(input("attendee list:"))
final_list=list(filter(lengthgood,attendancelist))
for i in finallist:
    print (i)

我想编写一个程序,创建一个列表,其中只有短于14的元素可以参与其中。

这是我的代码,但是即使某些元素的长度大于14,它仍会返回我放入的所有元素?

我试图打印len(i),它说列表中的每个元素都为1?

我该如何解决?

3 个答案:

答案 0 :(得分:2)

您不应将return放入循环中;它只会返回符合您条件的第一个元素。

您也不应该在过滤器函数中循环,因为您实际上是在遍历长度均为1的字符串字符

因此,第一个字符始终返回真实值,过滤后会返回初始输入


您只需要检查输入长度,理想情况下,过滤器函数应该返回适​​当的布尔条件,而不是真实值(在您的情况下,return i返回的是非空字符串)

def lengthgood(x):
    return len(x)<13

如果您不需要使用filter(),则可以编写列表理解

final_list=[a if len(a) < 13 for a in attendancelist] 

答案 1 :(得分:0)

可能就是这样

flst = []

def croper(lst):
    for i in lst:
        flst.append(i) if len(i) < 13 else 0 


lst = input("attendee list:").split(',')
croper(lst)

print(flst)

或更短

def croper(lst):
    return [i for i in lst if len(i) < 13] 

lst = input("attendee list:").split(',')

print(croper(lst))

答案 2 :(得分:0)

您想要创建一个列表,但您不想在程序中的任何位置定义它,只需使用一个功能makeproperlist(x)即可完成。
试试看这段代码,对您有帮助。

attendancelist=[]
while (True):
   ch=input("Enter c for continue and e for exit : ")
   if (ch=='c'):
       def makeproperlist(x):
           if x<=13:
               attendancelist.append(x)
           else:
               print("Enter number which is <= to 13.")
       makeproperlist(int(input("attendee list:")))
    elif (ch=='e'):
        break;
print("Your attendece list : ",attendancelist)