Книга программиста/Обработка списков на Python: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 91: Строка 91:


=Более сложные задачи=
=Более сложные задачи=
==Строка с максимальным количеством согласных==
==Строки с максимальным количеством согласных==
<source lang="python">
<source lang="python">
N = 10
N = 10
Строка 118: Строка 118:
print('Слово {0} содержит максимальное количество согласных: {1}.'.format(Words[j], Count[j]))
print('Слово {0} содержит максимальное количество согласных: {1}.'.format(Words[j], Count[j]))
</source>
</source>
[[Задачи_на_PascalABC.Net#.D0.A1.D1.82.D1.80.D0.BE.D0.BA.D0.B0_.D1.81_.D0.BC.D0.B0.D0.BA.D1.81.D0.B8.D0.BC.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.BC_.D0.BA.D0.BE.D0.BB.D0.B8.D1.87.D0.B5.D1.81.D1.82.D0.B2.D0.BE.D0.BC_.D1.81.D0.BE.D0.B3.D0.BB.D0.B0.D1.81.D0.BD.D1.8B.D1.85|Смотрите также: реализация на PascalABC.Net.]]

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

Версия от 17:37, 15 сентября 2017

Все программы, код которых выложен здесь, являются работоспособными.

Сортировки

Сортировка пузырьком

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(0, 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(0, N):
	Words.append(input())
	Count.append(0)

for i in range(0, N):
	for j in Words[i]:
		if j.upper() in Consonants:
			Count[i] += 1

j = 0
Max = Count[0]
for i in range(0, 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]) + ' ')

Максимальные элементы столбцов

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)