Книга программиста/Обработка списков на Python
Внешний вид
К оглавлению | Назад | Вперёд
Все программы, код которых выложен здесь, являются работоспособными.
Сортировки
[править]Сортировка пузырьком
[править]import random
N = 10
L = list()
for i in range(N):
L.append(random.randint(0, 100))
print(L)
for j in range(N - 1, 0, -1):
for i in range(j):
if L[i] > L[i + 1]:
L[i], L[i + 1] = L[i + 1], L[i]
print(L)
Сортировка выбором
[править]import random
N = 10
L = list()
for i in range(N):
L.append(random.randint(0, 100))
print(L)
for i in range(N):
for j in range(i + 1, N):
if L[i] > L[j]:
L[i], L[j] = L[j], L[i]
print(L)
Сортировка вставками
[править]import random
N = 10
L = list()
for i in range(N):
L.append(random.randint(0, 100))
j = i
while j > 0 and L[j - 1] > L[j]:
L[j - 1], L[j] = L[j], L[j - 1]
j -= 1
print(L)
Шейкерная сортировка
[править]import random
N = 4
L = list()
for i in range(N):
L.append(random.randint(0, 10))
print('Изначальный список:')
print(L)
Left = 0
Right = N - 1
while Left < Right:
for i in range(Right, Left, -1):
if L[i - 1] > L[i]:
L[i - 1], L[i] = L[i], L[i - 1]
for i in range(Left + 1, Right):
if L[i] > L[i + 1]:
L[i], L[i + 1] = L[i + 1], L[i]
Right -= 1
Left += 1
print('Изменённый список:')
print(L)
Смотрите также: реализация на PascalABC.Net.
Более сложные задачи
[править]Строки с максимальным количеством согласных
[править]N = 10
Words = list()
Count = list()
Consonants = set('QWRTPSDFGHJKLZXCVBNM')
for i in range(N):
Words.append(input())
Count.append(0)
for i in range(N):
for j in Words[i]:
if j.upper() in Consonants:
Count[i] += 1
j = 0
Max = Count[0]
for i in range(N):
if Count[i] > Max:
Max = Count[i]
j = i
print('Слово {0} содержит максимальное количество согласных: {1}.'.format(Words[j], Count[j]))
Смотрите также: реализация на PascalABC.Net.
Исключение одинаковых элементов списка
[править]Exists - список, который хранит булевы значения для указания того, что некоторый i-ый элемент должен быть в списке.
import random
N = 10
L, Exists = list(), list()
for i in range(N):
L.append(random.randint(0, 10))
Exists.append(True)
print('Изначальный список:')
print(L)
for i in range(N):
if Exists[i]:
for j in range(i + 1, N):
if L[j] == L[i]:
Exists[j] = False
print('Изменённый список:')
for i in range(N):
if Exists[i]:
print(str(L[i]) + ' ')
Смотрите также: реализация на PascalABC.Net.
Максимальные элементы столбцов
[править]import random
N = 4
L = []
Max = list()
for i in range(N):
L.append([])
Max.append(-10000)
for j in range(N):
L[i].append(random.randint(0, 100))
print('Матрица:')
for i in range(N):
print(L[i])
for j in range(N):
for i in range(N):
if L[i][j] > Max[j]:
Max[j] = L[i][j]
print('Максимумы:')
print(Max)
Минимальные элементы на пересечении строк и столбцов
[править]import random
def Print(l):
print('Матрица:')
for i in range(len(l)):
print(l[i])
N = 4
L = []
for i in range(N):
L.append([])
for j in range(N):
L[i].append(random.randint(0, 10))
Print(L)
MinI = 0
MinJ = 0
Min = 0
Found = False
for i in range(N):
Min = 10000
Found = True
for j in range(N):
if L[i][j] < Min:
Min = L[i][j]
MinI = i
MinJ = j
for i2 in range(N):
if L[i2][MinJ] < Min:
Found = False
if Found:
break
if not Found:
print('Минимального элемента на пересечении строк и столбцов не найдено.')
else:
print('Индексы минимального элемента {0} равны [{1}, {2}].'.format(Min, MinI, MinJ))
Двузначные числа, кратные 2
[править]import math, random
def Print(l):
print('Матрица:')
for i in range(len(l)):
print(l[i])
N = 4
L = []
for i in range(N):
L.append([])
for j in range(N):
L[i].append(random.randint(0, 100))
Print(L)
C = 0
for i in range(N):
for j in range(N):
if (math.fabs(L[i][j]) >= 10) and (math.fabs(L[i][j]) < 100) and ((s//2 + s%2)%2 == 0):
C += 1
print('Количество двузначных чисел с четной суммой цифр равно {0}.'.format(C))
Поменять местами строки двумерного списка
[править]import random
def Print(l):
print('Матрица:')
for i in range(len(l)):
print(l[i])
N = 4
L = []
for i in range(N):
L.append([])
for j in range(N):
L[i].append(random.randint(0, 100))
Print(L)
N2 = N - 1
i1 = random.randint(0, N2)
i2 = random.randint(0, N2)
for j in range(N):
L[i1][j], L[i2][j] = L[i2][j], L[i1][j]
Print(L)
Совершенные числа
[править]L = list()
for a in range(1, 1001):
S = 0
for k in range(1, a):
if a%k == 0:
S += k
if S == a:
L.append(a)
print(L)
Смотрите также: реализация на PascalABC.Net.
Сумма чисел многомерного списка
[править]def Sum(a):
if type(a) is int:
return a
else:
result = 0
for b in a:
result += Sum(b)
return result
L = [[1, 2], 3, [4, [5, 6]], 7, [8]]
print(Sum(L))