Как посчитать длину списка с условным исключением определенных строк и чисел? Python - PullRequest
1 голос
/ 17 апреля 2020

У меня есть список, который я хотел бы посчитать, но сначала его нужно почистить.

Список выглядит примерно так:

list= ['Skills & Endorsements', 'Problem Solving',  'See 9 endorsements for Problem Solving', '9']  

Я хочу посчитать строку, но исключить все числа и строки, в которых есть числа. В этом примере я хотел бы удалить число 9 и элемент See 9 endorsements for Problem Solving.

У меня возникли проблемы с условным условием в Python, где 0 - если оно нарушает условное и 1, если он удовлетворяет условиям, считается, если != число или строка, включающая See.

Ответы [ 5 ]

3 голосов
/ 17 апреля 2020

Один из способов сделать это - использовать модуль re для создания простого регулярного выражения, соответствующего числам. Затем вы можете поместить это в понимание списка и спросить его длину:

import re

l = ['Skills & Endorsements', 'Problem Solving',  'See 9 endorsements for Problem Solving', '9']  

# what the comprehension makes:
print([s for s in l if re.search(r'\d', s) is None])
# ['Skills & Endorsements', 'Problem Solving']

len([s for s in l if re.search(r'\d', s) is None])
# 2
2 голосов
/ 17 апреля 2020

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

mylist = ['Skills & Endorsements', 'Problem Solving',  'See 9 endorsements for Problem Solving', '9']

print([s for s in mylist if not any(c.isdigit() for c in s)])

Выход:

['Skills & Endorsements', 'Problem Solving']
2 голосов
/ 17 апреля 2020

Я предлагаю вам использовать re, чтобы проверить, есть ли число в строке, а не

import re
list= ['Skills & Endorsements', 'Problem Solving',  'See 9 endorsements for Problem Solving', '9']
count = len([e for e in list if not re.findall('\d', e)])

Регулярное выражение в этом примере, пытающееся найти все числа \d, может появиться в каждом элементе. Если номера нет, он «посчитает» этот элемент и добавит его во временный список. Наконец, нам просто нужно получить len этого временного списка, чтобы узнать, сколько элементов в нем

2 голосов
/ 17 апреля 2020

Попробуйте:

[i for i in list1 if not any(j.isnumeric() for j in i)]

Это отфильтровывает элементы без номеров.

['Skills & Endorsements', 'Problem Solving']
1 голос
/ 17 апреля 2020

Определите метод с вашим условием, а затем переберите элементы списка по функции

In [26]: def my_cond(x):
    ...:     return  any(map(str.isdigit, x))
    ...:
    ...:

In [27]: print(sum(1 for x in list2 if not my_cond(x)))
2

Функция проверит, является ли какой-либо символ в строке di git или нет, основываясь на том, что она вернет правда или ложь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...