Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 23.11.2021
Сообщений: 71

Определите можно ли из списка А вычеркнуть некоторые элементы так, чтобы получился список В

04.01.2022, 14:16. Показов 1736. Ответов 26

Студворк — интернет-сервис помощи студентам
Можно использовать простенькие списки, задача должна быть примерно в 10-15 строк. Всем огромное спасибо
Даны два списка целых чисел А и В. Числа в списках расположены в порядке неубывания. Определите можно ли из списка А вычеркнуть некоторые элементы так, чтобы получился список В.

Входные данные

С клавиатуры вводится список целых чисел. Числа вводятся в одной строке через пробел и расположены в порядке неубывания.

Во второй строке вводится еще один список целых чисел. Числа вводятся в одной строке через пробел и расположены в порядке неубывания.

Выходные данные

Выведите YES, если из списка А можно получить список В, NO – в противном случае.

Примеры

Входные данные

4 13 15 22 28

1 8 13

Выходные данные

NO

Входные данные

4 13 15 22 28

13 22 28

Выходные данные

YES
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2022, 14:16
Ответы с готовыми решениями:

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

Определить, можно ли переставить буквы так, чтобы получился палиндром
3.На вход программы подаются прописные латинские буквы, ввод этих символов заканчивается точкой. Напишите эффективную по времени работы и...

Задана последовательность N вещественных чисел. Определите, можно ли так перестроить ее элементы, чтобы они образовали г
Хелпаните плиз:gcray2::help::help::help:, надо код перестроить на N вещестные числа и для вычесления гометрической прогрессии. Буду очень...

26
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
04.01.2022, 17:05
До этого снова неправильно работало, например на:
Python
1
2
a = [1,3,4,5]
b = [1,4,4,5]
Сейчас вроде нормально.
Python
1
2
3
4
5
6
7
8
9
10
11
12
a = input().split()
b = input().split()
 
index = 0
for i in range(len(b)):
    if b[i] in a[index:]:
        index = a.index(b[i], index) + 1
    else:
        print('NO')
        break
else:
    print('YES')
3
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
09.01.2022, 23:46
ChaiNZero, можно чуть проще.
Python
1
2
3
4
5
6
7
8
9
10
from numpy import intersect1d
 
list_A = input().split()
list_B = input().split()
 
 
print(
    'YES' if list(intersect1d(list_A, list_B)) == list_B
    else 'NO'
)
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
10.01.2022, 00:41
ResDT,
не сработает
Python
1
2
list_A = [1,4,4,5]
list_B = [1,4,4,5]
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
10.01.2022, 12:04
Цитата Сообщение от Alexarh Посмотреть сообщение
ResDT,
не сработает
Ну да, ведь функция
Цитата Сообщение от ResDT Посмотреть сообщение
intersect1d
возвращает множество от пересечения.

Добавлено через 3 минуты
Цитата Сообщение от Alexarh Посмотреть сообщение
Сейчас вроде нормально
Alexarh, неправильно работает на многих примерах, например:
A = [0,1] B = [0,1]
A = [0,1,2,2] B = [2,2,2] и т.д.

Добавлено через 4 минуты
Мои две функции:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from collections import Counter
from random import randint
import copy
#==============================================================================
def fun_dict(A, B):
    count_A = dict( Counter(A) )
    count_B = dict( Counter(B) )
    for n in count_B:
        if not n in count_A or count_B[n] > count_A[n]:
            return False
    return count_A != count_B
#==============================================================================
def fun(A, B):
    A = copy.copy(A)
    if A == B:
        return False
    if len(B) == 0:
        return True
    for n in B:
        if not n in A:
            return False
        A.remove(n)
    return len(A) > 0
#==============================================================================
A = [randint(0, 2) for i in range( randint(0, 5) )]
B = [randint(0, 2) for i in range( randint(0, 5) )]
A.sort()
B.sort()
 
print('A =', A)
print('B =', B)
 
print( fun_dict(A, B) )
print( fun( A, B) )
print()
 
A, B = B, A
 
print('A =', A)
print('B =', B)
 
print( fun_dict(A, B) )
print( fun( A, B) )
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
10.01.2022, 12:19
Цитата Сообщение от idealist Посмотреть сообщение
Alexarh, неправильно работает на многих примерах, например:
A = [0,1] B = [0,1]
A = [0,1,2,2] B = [2,2,2] и т.д.
Почему? Оба эти варианта нормально отработали.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
10.01.2022, 12:34
Цитата Сообщение от Alexarh Посмотреть сообщение
Почему? Оба эти варианта нормально отработали.
)) Нормально это как?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
a = [0,1]
b = [0,1]
 
index = 0
for i in range(len(b)):
    if b[i] in a[index:]:
        index = a.index(b[i], index) + 1
    else:
        print('NO')
        break
else:
    print('YES')
#==============================================================================
#YES
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
10.01.2022, 12:43
Цитата Сообщение от idealist Посмотреть сообщение
Нормально это как?
Ну так из списка а можно получить б, просто не надо ничего вычеркивать.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
10.01.2022, 13:00
Но это противоречит условию:

Цитата Сообщение от ChaiNZero Посмотреть сообщение
Определите можно ли из списка А вычеркнуть некоторые элементы так, чтобы получился список В.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
10.01.2022, 13:16
Цитата Сообщение от idealist Посмотреть сообщение
Но это противоречит условию
Ничего не вижу, что надо что-то обязательно вычеркивать. Это уже трактовки разные просто.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
10.01.2022, 13:21
Цитата Сообщение от Alexarh Посмотреть сообщение
Ничего не вижу, что надо что-то обязательно вычеркивать. Это уже трактовки разные просто.
Понятно.
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
11.01.2022, 01:28
Цитата Сообщение от Alexarh Посмотреть сообщение
не сработает
Alexarh, почему же?) Сами себе противоречите)
Python
1
2
3
4
5
6
7
8
9
10
11
12
from numpy import intersect1d
 
list_A = [1, 4, 4, 5]
list_B = [1, 4, 4, 5]
 
 
print(
    'YES' if list(intersect1d(list_A, list_B)) == list_B
    else 'NO'
)
#================================================================
# NO
Добавлено через 33 минуты
Alexarh, idealist, однако я согласен, что в коде был прокол. Сейчас исправил, должно работать. Насчет трактовки тоже соглашусь: формулировка немного неверная.
Python
1
2
3
4
5
6
7
8
list_A = input().split()
list_B = input().split()
 
 
print(
    'YES' if all([list_A.count(element) >= list_B.count(element) for element in list_B]) # and list_A != list_B, если хотите, чтобы при одинаковых списках писал "NO".
    else 'NO'
)
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
11.01.2022, 01:45
Цитата Сообщение от ResDT Посмотреть сообщение
если хотите, чтобы при одинаковых списках писал "NO".

Ну так это же ответ на вопрос
Цитата Сообщение от ChaiNZero Посмотреть сообщение
можно ли из списка А вычеркнуть некоторые элементы так, чтобы получился список В
И вы отвечаете можно вычеркнуть, но ничего вычеркивать не надо...
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
11.01.2022, 08:36
Цитата Сообщение от ChaiNZero Посмотреть сообщение
Числа вводятся в одной строке через пробел и расположены в порядке неубывания
слияние двух списков (merge). что тут мудрить?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
11.01.2022, 11:11
Цитата Сообщение от eaa Посмотреть сообщение
слияние двух списков (merge)
Но здесь же вроде бы обратная операция, т.е. "разлияние"?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
11.01.2022, 11:43
вроде так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = [4, 13, 15, 22, 28]
b = [1, 13, 22, 28]
i = j = 0
count = 0
while i < len(a) and j < len(b):
    if a[i] < b[j]:
        i += 1
    else:
        if a[i] == b[j]:
            i += 1
            count += 1
        j += 1
 
if count == len(b):
    print('YES')
else:
    print('NO')
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
11.01.2022, 12:05
Цитата Сообщение от eaa Посмотреть сообщение
вроде так
Но это же низкоуровневый код. У списка же есть метод count, как справедливо заметил ResDT (я почему-то через Counter делал).
Да и этот код проще:

Python
1
2
3
4
5
6
7
8
9
10
11
def fun(A, B):
    A = copy.copy(A)
    if A == B:
        return False
    if len(B) == 0:
        return True
    for n in B:
        if not n in A:
            return False
        A.remove(n)
    return len(A) > 0
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
11.01.2022, 12:10
Цитата Сообщение от idealist Посмотреть сообщение
Но это же низкоуровневый код

Не по теме:

Это ты меня так оскорбил?


шутка.

Я спорить не буду, пишите как хотите. Тут дело в асимптотике алгоритма.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
11.01.2022, 12:28
Цитата Сообщение от eaa Посмотреть сообщение
Цитата Сообщение от idealist
Но это же низкоуровневый код
Не по теме:
Это ты меня так оскорбил?
шутка.
Ну, я имел в виду, что за индексами следить надо внимательно. Но чувствуется, что у вас уже рука набита на этом алгоритме и для вас его написать очень легко.

Добавлено через 12 минут
Цитата Сообщение от eaa Посмотреть сообщение
вроде так:
Кстати, на равных списках она показывает ДА, а по условию нужно НЕТ.
0
 Аватар для Aviz__
2736 / 2046 / 506
Регистрация: 17.02.2014
Сообщений: 9,462
11.01.2022, 12:47
Цитата Сообщение от ChaiNZero Посмотреть сообщение
Числа в списках расположены в порядке неубывания
без этого условия:
Python
1
2
3
4
5
6
7
8
9
10
11
a = [2, 13, 15, 22, 28]
b = [13, 2, 28]
counter = 0
for elb in b:
    if elb in a:
        counter += 1
 
if counter == len(b):
    print('Yo')
else:
    print('Heh')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2022, 12:47
Помогаю со студенческими работами здесь

Определить, можно ли переставить последовательность цифр так, чтобы получился палиндром
Задача 2. Палиндром. Написать программу, которая будет определять, можно ли переставить заданную последовательность цифр, так чтобы...

Список: программа Вставляет элементы списка L2 в L1 так, чтобы L1 остался упорядоченным
Помогите пожалуйста решить задачу. Разработать программу, которая создает списки L1 и L2, элементами которых являются целые числа (элементы...

Строка: Определить, можно ли переставить эти буквы так чтобы получился палиндром?
На вход программы подается прописные латинские буквы, ввод этих символов заканчивается точкой. Нужна программа определяющая можно ли...

Можно ли прямоугольники приложить друг к другу так, чтобы получился новый прямоугольник?
Даны два прямоугольника с размерами a*b и c*d. (a, b, c, d натуральные числа). Можно ли их приложить друг к другу так, чтобы получился...

Можно ли удалить из списка какие-либо два элемента так, чтобы новый список оказался упорядоченным
нужно написать код в программе python Определить, можно ли удалить из списка какие-либо два элемента так, чтобы новый список оказался ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru