Решение задач на Python. Списки. Операции со списками
СПИСКИ. ЗАДАЧА 1
Вам дано число N и число X. Выведите
число X ровно N раз в формате [X, X, X. ,X].
Используйте функцию print() для вывода списка.
Решение:
n=int(input())
x=int(input())
x=[x]
print(x*n)
3.
СПИСКИ. ЗАДАЧА 2
Дано число N. Выведите N квадратов чисел
от 1 до N (включительно) в формате [1, 4, 9, 16,…, N**2].
Используйте функцию print() для вывода списка.
Решение:
n=int(input())
x=[]
for i in range(n):
x.append((i+1)**2)
print(x)
4.
СПИСКИ. ЗАДАЧА 3
Выведите все чётные элементы списка.
Решение:
a=list(map(int, input().split()))
for i in range(len(a)):
if a[i]%2==0:
print(a[i], end=» «)
5.
СПИСКИ. ЗАДАЧА 4
Выведите все элементы списка с чётными индексами (то
есть A[0],A[2],A[4]. ).
Решение:
a=list(map(int, input().split()))
for i in range(0,len(a),2):
print(a[i], end=» «)
6.
СПИСКИ. ЗАДАЧА 5
Дан список чисел. Определите, сколько в этом списке
элементов, которые больше двух своих соседей, и
выведите количество таких элементов.
Решение:
a=list(map(int, input().split()))
k=0
for i in range(1,len(a)-1):
if a[i]>a[i-1] and a[i]>a[i+1]:
k+=1
print(k)
7.
СПИСКИ. ЗАДАЧА 6
Дан список чисел. Если в нем есть два соседних
элемента одного знака, выведите эти числа. Если
соседних элементов одного знака нет — не выводите
ничего. Если таких пар соседей несколько — выведите
первую пару.
Решение:
a=list(map(int, input().split()))
for i in range(len(a)-1):
if (a[i]>=0 and a[i+1]>=0) or (a[i] print(a[i], a[i+1])
break
8.
СПИСКИ. ЗАДАЧА 7
Выведите значение наименьшего из всех положительных
элементов в списке. Известно, что в списке есть хотя бы
один положительный элемент.
Решение:
a=list(map(int, input().split()))
m=1001
for i in range(len(a)):
if a[i]>0 and a[i] m=a[i]
print(m)
9.
СПИСКИ. ЗАДАЧА 8
Дан список, упорядоченный по неубыванию элементов в
нём. Определите, сколько в нём различных элементов.
Решение:
a=list(map(int, input().split()))
k=1
for i in range(len(a)-1):
if a[i]!=a[i+1]:
k+=1
print(k)
10.
СПИСКИ. ЗАДАЧА 9
Напишите программу, которая находит в массиве
элемент, самый близкий по величине к данному числу.
Решение:
a=list(map(int, input().split()))
x=int(input())
minr=a[0]
for i in a:
if abs(i-x) minr=i
print(minr)
11.
СПИСКИ. ЗАДАЧА 10
Петя перешёл в другую школу. На уроке физкультуры ему
понадобилось определить своё место в строю. Помогите
ему это сделать.
Решение:
a=list(map(int, input().split()))
x=int(input())
n=1
for i in range(len(a)):
if a[i]>=x:
n=i+2
print(n)
12.
СПИСКИ. ЗАДАЧА 11
Циклически сдвиньте элементы списка вправо
(A[0] переходит на место A[1], A[1] — на
место A[2],…,A[2],…, последний элемент переходит на
место A[0]).
Решение:
a=input().split()
p=a[-1]
for i in range(len(a)-2, -1, -1):
a[i+1]=a[i]
a[0]=p
print(‘ ‘.join(a))
13.
СПИСКИ. ЗАДАЧА 12
Дан список целых чисел, содержащий как минимум два элемента. Найдите в нём два
ближайших элемента (то есть два элемента с минимальной абсолютной разностью).
Изменять список при этом нельзя.
Решение:
N = int(input())
s = list(map(int, input().split()))
m = 2**32
g=0
g1 = 0
for i in range(N — 1):
for k in range(i+1, N):
if abs(s[i]-s[k]) < m:
m = abs(s[i]-s[k])
g=k
g1 = i
print(g1, g)
14.
СПИСКИ. ЗАДАЧА 13
В списке нечётное число элементов, при этом все элементы различны.
Найдите медиану списка: элемент, который стоял бы ровно посередине
списка, если список отсортировать.
Решение:
n=int(input())
a=list(map(int, input().split()))
for i in range(n):
k=0
for j in range(n):
if a[j] k+=1
if k==len(a)//2:
print(a[i])
break
15.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 1
Используя генератор, составьте список S,
заполненный степенями числа X от 0 до N−1 и
распечатайте его инструкцией print(S).
Решение:
x=int(input())
a=[x**i for i in range(int(input()))]
print(a)
16.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 2
Выведите элементы данного списка в обратном
порядке.
Решение:
a=list(map(int, input().split()))
b=[print(a[-i]) for i in range(1, len(a)+1)]
17.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 3
Вам дан список целых чисел. Разверните
элементы с нечетными индексами.
Решение:
a=input().split()
a[1::2]=a[1::2][::-1]
print(‘ ‘.join(a))
18.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 4
Дан список из чисел и индекс элемента в
списке k. Удалите из списка элемент с индексом k,
сдвинув влево все элементы, стоящие правее
элемента с индексом k.
Решение:
a=list(map(int, input().split()))
k=int(input())
a.pop(k)
a=[print(a[i], end=’ ‘) for i in range(len(a))]
19.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 5
Дан список целых чисел, число k и значение C.
Необходимо вставить в список на позицию с
индексом k элемент, равный C, сдвинув все
элементы, имевшие индекс не менее k, вправо.
Решение:
a=list(map(int, input().split()))
k, c=input().split()
last=a[-1]
a.insert(int(k), int(c))
a=[print(a[i], end=’ ‘) for i in range(len(a))]
20.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 6
Дан список. Посчитайте, сколько в нём различных
элементов, не изменяя самого списка.
Решение:
a =list(map(int, input().split()))
s=0
k = []
for i in a:
if i not in k:
s += 1
k.append(i)
print(len(k))
21.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 7
Дан список. Выведите те его элементы, которые
встречаются в списке только один раз.
Решение:
a = [int(s) for s in input().split()]
for i in range(len(a)):
for j in range(len(a)):
if i != j and a[i] == a[j]:
break
else:
print(a[i], end=’ ‘)
22.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 8
Дан список. Не изменяя его и не используя дополнительные
списки, определите, какое число в этом списке
встречается чаще всего.
Решение:
s = [int(s) for s in input().split()]
max = s[0]
max_k = s.count(max)
for i in s:
if s.count(i)>max_k:
max = i
max_k = s.count(i)
print(max)
23.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 9
Дан список чисел. Посчитайте, сколько в нём пар
элементов, равных друг другу. Считается, что любые два
элемента, равные друг другу, образуют одну пару, которую
необходимо посчитать.
Решение:
a=input().split()
b=0
for i in range(len(a)):
for j in range(i+1,len(a)):
if a[i]==a[j]:
b+=1
print(b)
24.
ОПЕРАЦИИ СО СПИСКАМИ. ЗАДАЧА 10
Дан список чисел. В списке все элементы различны.
Поменяйте местами минимальный и максимальный
элемент этого списка.
Решение:
a=list(map(int, input().split()))
Imax=a.index(max(a))
Imin=a.index(min(a))
a[Imin], a[Imax]=a[Imax], a[Imin]
for i in range(len(a)):
print(a[i], end=’ ‘)
Списки продолжаются
Primes — 6 элементов, а именно, Primes[0] == 2 , Primes[1] == 3 , Primes[2] == 5 , Primes[3] == 7 , Primes[4] == 11 , Primes[5] == 13 . Список Rainbow состоит из 7 элементов, каждый из которых является строкой.
Также как и символы строки, элементы списка можно индексировать отрицательными числами с конца, например, Primes[-1] == 13 , Primes[-6] == 2 .
Длину списка, то есть количество элементов в нем, можно узнать при помощи функции len , например, len(A) == 6 .
Рассмотрим несколько способов создания и считывания списков. Прежде всего можно создать пустой список (не содержащий элементов, длины 0), в конец списка можно добавлять элементы при помощи метода append . Например, если программа получает на вход количество элементов в списке n , а потом n элементов списка по одному в отдельной строке, то организовать считывание списка можно так:
A = [] for i in range(int(input())): A.append(int(input()))
В этом примере создается пустой список, далее считывается количество элементов в списке, затем по одному считываются элементы списка и добавляются в его конец.
Для списков целиком определены следующие операции: конкатенация списков (добавление одного списка в конец другого) и повторение списков (умножение списка на число). Например:
A = [1, 2, 3] B = [4, 5] C = A + B D = B * 3
В результате список C будет равен [1, 2, 3, 4, 5] , а список D будет равен [4, 5, 4, 5, 4, 5] . Это позволяет по-другому организовать процесс считывания списков: сначала считать размер списка и создать список из нужного числа элементов, затем организовать цикл по переменной i начиная с числа 0 и внутри цикла считывается i -й элемент списка:
A = [0] * int(input()) for i in range(len(A)): A[i] = int(input())
Вывести элементы списка A можно одной инструкцией print(A) , при этом будут выведены квадратные скобки вокруг элементов списка и запятые между элементами списка. Такой вывод неудобен, чаще требуется просто вывести все элементы списка в одну строку или по одному элементу в строке. Приведем два примера, также отличающиеся организацией цикла:
for i in range(len(A)): print(A[i])
Здесь в цикле меняется индекс элемента i , затем выводится элемент списка с индексом i .
for elem in A: print(elem, end = ' ')
В этом примере элементы списка выводятся в одну строку, разделенные пробелом, при этом в цикле меняется не индекс элемента списка, а само значение переменной (например, в цикле for elem in [‘red’, ‘green’, ‘blue’] переменная elem будет последовательно принимать значения ‘red’ , ‘green’ , ‘blue’ .
Методы split и join
Элементы списка могут вводиться по одному в строке, в этом случае строку можно считать функцией input() . После этого можно использовать метод строки split , возвращающий список строк, разрезав исходную строку на части по пробелам. Пример:
A = input().split()
Если при запуске этой программы ввести строку 1 2 3 , то список A будет равен [‘1’, ‘2’, ‘3’] . Обратите внимание, что список будет состоять из строк, а не из чисел. Если хочется получить список именно из чисел, то можно затем элементы списка по одному преобразовать в числа:
for i in range(len(A)): A[i] = int(A[i])
Используя функции языка map и list то же самое можно сделать в одну строку:
A = list(map(int, input().split()))
Объяснений, как работает этот код, пока не будет. Если нужно считать список действительных чисел, то нужно заменить тип int на тип float .
У метода split есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка. Например, метод split(‘.’) вернет список, полученный разрезанием исходной строки по символам ‘.’ .
Используя “обратные” методы можно вывести список при помощи однострочной команды. Для этого используется метод строки join . У этого метода один параметр: список строк. В результате получается строка, полученная соединением элементов списка (которые переданы в качестве параметра) в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод. Например программа
A = ['red', 'green', 'blue'] print(' '.join(A)) print(''.join(A)) print('***'.join(A))
выведет строки ‘red green blue’ , redgreenblue и red***green***blue .
Если же список состоит из чисел, то придется использовать еще и функцию map . То есть вывести элементы списка чисел, разделяя их пробелами, можно так:
print(' '.join(map(str, A)))
Упражнения
Во всех задачах этого листка программа получает на вход строку из целых чисел, разделенных пробелами. В конце строки также могут быть пробелы. Данную строку необходимо считать в список целых чисел.
A: Четные индексы
Выведите все элементы списка с четными индексами (то есть A[0] , A[2] , A[4] , . ).
Посчитать количество одинаковых элементов в списке
Дан список целых чисел. Посчитать, сколько раз в нем встречается каждое число. Например, если дан список [1, 1, 3, 2, 1, 3, 4], то в нем число 1 встречается три раза, число 3 — два раза, числа 2 и 4 — по одному разу.
Решение задачи на языке программирования Python
Для хранения количества каждого встречающегося в списке значения создадим словарь. В нем ключами будут числа, которые встречаются в списке, а значениями — количества этих чисел в списке. Для примера, приведенного выше, в итоге должна получиться такая структура: .
Пусть в программе будет функция, которая заполняет список случайными числами в диапазоне и количестве, указанными пользователем.
Другая функция будет считать количество каждого значения и заносить данные в словарь. Алгоритм подсчета заключается в следующем. Если очередной элемент списка уже есть в качестве ключа словаря, то следует увеличить значение этого ключа на единицу. Если очередного элемента списка нет в качестве ключа в словаре, то такой ключ следует добавить и присвоить ему значение, равное единице.
Для того, чтобы вывести содержимое словаря в отсортированном по возрастанию ключей виде, используется функция sorted . Она сортирует ключи словаря и помещает их в список.
from random import randint def fill_list(minimum, maximum, amount, empty_list): for i in range(amount): empty_list.append(randint(minimum, maximum)) def analysis(from_list, to_dict): for i in from_list: if i in to_dict: to_dict[i] += 1 else: to_dict[i] = 1 lst = [] dct = {} mn = int(input('Минимум: ')) mx = int(input('Максимум: ')) qty = int(input('Количество элементов: ')) fill_list(mn, mx, qty, lst) analysis(lst, dct) for item in sorted(dct): print(f"'': ")
Минимум: 100 Максимум: 104 Количество элементов: 20 '100': 2 '101': 5 '102': 3 '103': 7 '104': 3
С другой стороны, если не требуется сохранять количества значений в программе, а надо только вывести их на экран (сохранить в файл, передать по сети), то задачу проще решить через использование спискового метода count() , который считает, сколько раз переданное в него значение встречается в списке, к которому применяется метод.
Если перебирать элементы самого списка, то метод count() будет вызываться несколько раз на одно и то же значение, если оно встречается в списке не единожды. Чтобы избежать этого, получим из списка множество и будем перебирать его элементы. Во множестве не бывает одинаковых значений.
from random import randint mn = int(input('Минимум: ')) mx = int(input('Максимум: ')) qty = int(input('Количество элементов: ')) lst = [randint(mn, mx) for i in range(qty)] s = set(lst) for i in s: print(f"'': ")
X Скрыть Наверх
Решение задач на Python
Решение задачи Самое частое число с Mccme
Дан список. Не изменяя его и не используя дополнительные списки, определите, какое число в этом списке встречается чаще всего.
Если таких чисел несколько, выведите любое из них.
Код
Скопировать код
#include using namespace std; int main() < string s; getline(cin, s); s.insert(0, " "); int pos = s.find(" "), pos1; if(s[s.size() - 1] == ' ') s.pop_back(); vectora; while(pos + 1) < pos1 = s.find(" ", pos + 1); a.push_back(stoi(s.substr(pos + 1, pos1 - pos - 1))); pos = pos1; >int mx = 0, res = a[0]; for(int i = 0; i < a.size() - 1; ++i)< int k = 0; for(int j = i + 1; j < a.size(); ++j)< if(a[i] == a[j])< ++k; a.erase(a.begin() + j); --j; >> if(k > mx) < mx = k; res = a[i]; >> cout
         
Автор: Администратор
Код
Скопировать код
a = list(input().split()) a = [int(i) for i in a] mx = 0 for i in range(len(a)): if a.count(a[i]) > mx: mx = a.count(a[i]) res = a[i] print(res)
         
Автор: Администратор
