Вложенные списки. Часть 1 | Вложенные списки. Часть 2

Треугольник Паскаля 1 🌶️

Треугольник Паскаля — бесконечная таблица биномиальных коэффициентов, имеющая треугольную форму. В этом треугольнике на вершине и по бокам стоят единицы. Каждое число равно сумме двух расположенных над ним чисел.

0:      1
1:     1 1
2:    1 2 1
3:   1 3 3 1
4:  1 4 6 4 1
      .....

На вход программе подается число n. Напишите программу, которая возвращает указанную строку треугольника Паскаля в виде списка (нумерация строк начинается с нуля).

Формат входных данных
На вход программе подается число n  (n≥0).

Формат выходных данных
Программа должна вывести указанную строку треугольника Паскаля в виде списка.

Примечание 1. Решение удобно оформить в виде функции pascal(), которая принимает номер строки и возвращает соответствующую строку треугольника Паскаля.

Примечание 2. Графическая иллюстрация формирования треугольника Паскаля.

Примечание 3. Подробнее прочитать о треугольнике Паскаля можно тут.

Тестовые данные 🟢

Sample Input 1:

0

Sample Output 1:

[1]

Sample Input 2:

3

Sample Output 2:

[1, 3, 3, 1]

Решение:

num=int(input()) def pascal(n): n = n+1 arr=[] for i in range(n): row=[1]*(i+1) for j in range(1,i): row[j] = arr[i - 1][j - 1] + arr[i - 1][j] arr.append(row) return arr[n-1] print(pascal(num))

Треугольник Паскаля 2

На вход программе подается натуральное число nn. Напишите программу, которая выводит первые n строк треугольника Паскаля.

Формат входных данных
На вход программе подается число n  (n≥1).

Формат выходных данных
Программа должна вывести первые n строк треугольника Паскаля, каждую на отдельной строке в соответствии с образцом.

Тестовые данные 🟢

Sample Input 1:

4 Sample Output 1:

1 1 1 1 2 1 1 3 3 1

Решение:

num=int(input()) def pascal(n): arr=[] for i in range(n): row=[1]*(i+1) for j in range(1,i): row[j] = arr[i - 1][j - 1] + arr[i - 1][j] arr.append(row) return arr for i in range(num): print(*pascal(num)[i])

Упаковка дубликатов 🌶️

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

Формат входных данных
На вход программе подается строка текста, содержащая символы, отделенные символом пробела.

Формат выходных данных
Программа должна вывести указанный вложенный список.

Тестовые данные 🟢

Sample Input 1:

a b c d

Sample Output 1:

[['a'], ['b'], ['c'], ['d']]

Sample Input 2:

w w w o r l d g g g g r e a t t e c c h e m g g p w w

Sample Output 2:

[ ['w', 'w', 'w'], ['o'], ['r'], ['l'], ['d'], ['g', 'g', 'g', 'g'], ['r'], ['e'], ['a'], ['t', 't'], ['e'], ['c', 'c'], ['h'], ['e'], ['m'], ['g', 'g'], ['p'], ['w', 'w'] ]

Решение:

n = input() # Разделить строку по пробелам r = n.split() # Инициализируем переменные arr = [] tempArr = [] # Проходим по всем символам for i in range(len(r)): if i==0 or r[i] == r[i-1]: # Если это первый символ или он равен предыдущему, добавляем его в временный лист tempArr.append(r[i]) else: # Если символ не равен предыдущему, сохраняем временный лист в постояный и переназначаем ему новое значение arr.append(tempArr) tempArr = [r[i]] # Если в временом листе осталось значение добавляем его в постоянный if tempArr: arr.append(tempArr) print(arr)

Разбиение на чанки 🌶️

На вход программе подаются две строки: на одной – символы, на другой – число n. Из первой строки формируется список.

Реализуйте функцию chunked(), которая принимает на вход список и число, задающее размер чанка (куска), а возвращает список из чанков (кусков) указанной длины.

Формат входных данных
На вход программе подается строка текста, содержащая символы, отделенные символом пробела и число nn на отдельной строке.

Формат выходных данных
Программа должна вывести указанный вложенный список.

Примечание. Не забудьте вызвать функцию chunked(), чтобы вывести результат. 😀

Тестовые данные 🟢

Sample Input 1:

a b c d e f 2

Sample Output 1:

[ ['a', 'b'], ['c', 'd'], ['e', 'f'] ]

Sample Input 2:

a b c d e f r g b 2

Sample Output 2:

[ ['a', 'b'], ['c', 'd'], ['e', 'f'], ['r', 'g'], ['b'] ]

Решение:

import math str = input() n = int(input()) r = str.split() # Инициализируем переменные arr = [] count1 = 0 count2 = n # Проходим по всем символам for i in range(math.ceil(len(r)/n)): arr.append(list(r[count1:count2])) count1 += n count2 += n print(arr)

Подсписки списка 🌶️🌶️

Подсписок — часть другого списка. Подсписок может содержать один элемент, несколько или даже ни одного. Например, [1], [2], [3] и [4] — подсписки списка [1, 2, 3, 4]. Список [2, 3] — подсписок списка [1, 2, 3, 4], но список [2, 4] не подсписок списка [1, 2, 3, 4], так как элементы 22 и 44 во втором списке не смежные (они разрываются элементом 33). Пустой список — подсписок любого списка. Сам список — подсписок самого себя, то есть список [1, 2, 3, 4] подсписок списка [1, 2, 3, 4].

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

Формат входных данных
На вход программе подается строка текста, содержащая символы, отделенные символом пробела.

Формат выходных данных
Программа должна вывести указанный список, содержащий все возможные подсписки, включая пустой список в соответствии с примерами.

Примечание. Порядок списков одинаковой длины должен соответствовать порядку их вхождения в основной список.

Тестовые данные 🟢

Sample Input 1:

a b

Sample Output 1:

[ [], ['a'], ['b'], ['a', 'b'] ]

Sample Input 2:

a b v

Sample Output 2:

[ [], ['a'], ['b'], ['v'], ['a', 'b'], ['b', 'v'], ['a', 'b', 'v'] ]

Решение:

# Считываем строку и преобразуем её в список n = input().split() # Создаем два пустых списка fin, tot = [], [[]] # Первый нарастающий цикл i от 0 до len(n) for i in range(len(n)): # print('индекс строки', i) # Второй нарастающий цикл j от 0 до len(n) for j in range(len(n)): # print('второй индекс строки', j) # Создаем подсписок fin fin = n[j:i + j + 1] #print('подсписок fin', fin) # print('длина подсписка fin', len(fin)) # Проверяем длину подсписка fin if len(fin) == i + 1: # Добавляем список fin в основной список tot tot.append(fin) # print('списк tot', tot) print(tot)