Python

Как найти сразу несколько символов в PYTHON?

Я уже давно пытаюсь связать этот геморрой со списками, find, индексами и.т.д
Но я знаю, что существуют очень простые методы.
Допустим есть строка = sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI
Так вот, мне нужно проверить, есть ли в этой строке буквы "D"E"N"I"
Только это будет список x = [input() for i in range(int(input())
И мне нужно проверить каждый индекс на наличие этих букв.
Как я смогу это сделать без ВЛОЖЕННЫХ ДО ТРЕХ ЦИКЛОВ, С КОПИРОВАНИЕМ, И.Т.Д?
Если нужен только факт наличия букв:
 s = "sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI"
d = set('DENI')
print(*filter(d.__contains__, s))
filter даст последовательность, которую можно обрабатывать. Например:
 if set(filter(d.__contains__, s)) == d: print('Все буквы присутствуют')
if sum(map(d.__contains__, s)) != 0: print('Хотя бы одна буква присутствует')

Если нужны индексы букв:
 s = "sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI"
d = set('DENI')
print(*(i for i in range(len(s)) if s[i] in d))
МБ
Максимка Белов
54 053
Лучший ответ
Нет здесь места вложенным циклам. Задача решается последовательно
Виктор Своя
Виктор Своя
75 161
import re
Almas Seithazin
Almas Seithazin
52 283
Как найти сразу несколько символов в Python без вложенных циклов, копирования и т.д.? Вам нужно проверить, есть ли определенные буквы "D", "E", "N" и "I" в данной строке: "sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI", используя список x = [input() for i in range(int(input())].

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

1. Метод any():
- Преобразуйте строку в набор символов с помощью set().
- Используйте функцию any() для проверки наличия каждого символа из списка x в наборе символов строки.
- Верните результат проверки.

Пример кода:
```python
string = "sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI"
x = [input() for _ in range(int(input()))]

characters = set(string)
result = any(char in characters for char in x)
print(result)
```

2. Метод intersection():
- Преобразуйте строку в набор символов с помощью set().
- Создайте набор символов из списка x.
- Используйте метод intersection() для проверки пересечения между набором символов строки и набором символов из списка x.
- Если результат intersection() не пустой, значит, все символы из списка x присутствуют в строке.

Пример кода:
```python
string = "sdisidsjDsdsjidsoijdiojEdsoijsjoidjoNsdjkI"
x = [input() for _ in range(int(input()))]

characters = set(string)
x_set = set(x)
result = characters.intersection(x_set) == x_set
print(result)
```

Оба этих метода позволяют проверить наличие нескольких символов в строке без необходимости использования вложенных циклов или копирования. Надеюсь, это поможет вам решить вашу задачу!
Данил Бутенко
Данил Бутенко
14 368
"сразу несколько символовом" - есть ли в этой строке буквы "D"E"N"I"
Что за проблема? Обычное in и цикл который проверяет вхождения.
Вот если под "сразу несколькими символами" имелись в виду все индексы вхождения какой-либо подстроки - было бы поинтереснее
 def find_dst(word, str_): 
ind = 0
while ind != -1:
ind = str_.find(word, ind) # поиск начиная с обновленного индекса
if ind > -1:
yield ind
ind += 1
s = 'der gdfy dst hgf hgrew dst hkrgd dst ghjk gjhjj dst hkjdst ggkk'
print(list(find_dst('dst', s)))
[9, 23, 33]
Павел Кутузов
Павел Кутузов
5 840