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?
我该如何解决?
答案 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)