Перейти к содержанию

Книга программиста/Обработка списков на 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))