Проверьте длину элементов в списке - PullRequest
0 голосов
/ 03 ноября 2018
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 голосов
/ 03 ноября 2018

может быть таким

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))
0 голосов
/ 03 ноября 2018

Вы хотите создать список, но нигде не определяете его в программе, просто сделали это с помощью одной функции 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)
0 голосов
/ 03 ноября 2018

Вы не должны помещать return в цикл; он вернет только первый элемент, соответствующий вашему условию.

Вы также не должны зацикливаться в своей функции фильтра, потому что вы фактически зацикливаетее на символах строк , которые все имеют длину 1.

Следовательно, первый символ всегда возвращает истинное значение, возвращая вам первоначальный ввод после фильтрации


Вам нужно только проверить длину ввода, и в идеале функции фильтра должны возвращать соответствующие логические условия, а не истинные значения (в вашем случае return i возвращает непустую строку)

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

Если вам не нужно использовать filter(), вы можете написать понимание списка

final_list=[a if len(a) < 13 for a in attendancelist] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...