Как получить только указанные c позиций из списка в Python - PullRequest
0 голосов
/ 13 июля 2020

Я хотел бы получить только указанные c элементы (A027SRR,B09P4RR,C09QMRR,C09MIRR,A026SRR,A0CDDRR,B0NOTRR) из списка, но, к сожалению, не работает, и я не знаю, в чем проблема. Спасибо

items = ['A027SRR', '0.00', '', 'B09P4RR', '852.00', '', 'C09QMRR', '309.60', '', 'C09MIRR', '18.70', '', 'A026SRR', '78.40', '', 'A0CDDRR', 'B0NOTRR', '', '1543.52', '1481.52', "VIP discount :   20.01%  \VIP discount's information"]
for f in items[:]:   # check if character is number then check if is empty then if is lower case then chceck if lenght is seven 
    if f.isdigit() == True and f =='' and f.islower()== True and len(f) != 7 :          
    items.remove(f)
print(" Items are : " + str(items))

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Если вам нужно решение с регулярным выражением:

If a string is having atleast 1 Upper Case letter and atleast 1 number and is of length 7
reg=re.compile("^(?=.{7}$)(?=.*\d)(?=.*[A-Z]).*")
list(filter(reg.search, items))
['A027SRR', 'B09P4RR', 'C09QMRR', 'C09MIRR', 'A026SRR', 'A0CDDRR', 'B0NOTRR']
0 голосов
/ 13 июля 2020

Просто используйте функцию фильтра и преобразуйте ее в список. Вы не указываете критерии, на основании которых хотите выполнить фильтрацию. Согласно вашему вопросу, вы хотите удалить элемент, если какое-либо из этих условий истинно, а не если все они верны. Это означает, что вам придется использовать or для разделения условий. Также isdigit() и islower() уже возвращают True или False, вам не нужно проверять его с помощью другого True, isdigit() вместо isdigit() == True

final_list = list(filter(lambda f: not (f.isdigit() or f =='' or f.islower() or len(f) != 7), items[:]))

Вы также можно использовать any:

final_list = list(filter(lambda f: not any([f.isdigit(),f =='', f.islower(),len(f) != 7]), items[:]))

Поскольку вы не хотите сохранять элементы, если условие истинно, вы можете использовать itertools.filterfalse, вам не нужно будет добавлять not:

from itertools import filterfalse
final_list = list(filterfalse(lambda f: f.isdigit() or f =='' or f.islower() or len(f) != 7, items[:]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...