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

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 4: Строка 4:
=Сортировки=
=Сортировки=
==Сортировка пузырьком==
==Сортировка пузырьком==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 22: Строка 22:


print(L)
print(L)
</syntaxhighlight>
</source>
==Сортировка выбором==
==Сортировка выбором==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 42: Строка 42:


print(L)
print(L)
</syntaxhighlight>
</source>
==Сортировка вставками==
==Сортировка вставками==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 59: Строка 59:


print(L)
print(L)
</syntaxhighlight>
</source>


==Шейкерная сортировка==
==Шейкерная сортировка==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 90: Строка 90:
print('Изменённый список:')
print('Изменённый список:')
print(L)
print(L)
</syntaxhighlight>
</source>
[[Задачи_на_PascalABC.Net#Шейкерная сортировка|Смотрите также: реализация на PascalABC.Net.]]
[[Задачи_на_PascalABC.Net#Шейкерная сортировка|Смотрите также: реализация на PascalABC.Net.]]


=Более сложные задачи=
=Более сложные задачи=
==Строки с максимальным количеством согласных==
==Строки с максимальным количеством согласных==
<source lang="python">
<syntaxhighlight lang="python">
N = 10
N = 10


Строка 120: Строка 120:


print('Слово {0} содержит максимальное количество согласных: {1}.'.format(Words[j], Count[j]))
print('Слово {0} содержит максимальное количество согласных: {1}.'.format(Words[j], Count[j]))
</syntaxhighlight>
</source>
[[Задачи_на_PascalABC.Net#Строки с максимальным количеством согласных|Смотрите также: реализация на PascalABC.Net.]]
[[Задачи_на_PascalABC.Net#Строки с максимальным количеством согласных|Смотрите также: реализация на PascalABC.Net.]]


==Исключение одинаковых элементов списка==
==Исключение одинаковых элементов списка==
'''Exists''' - список, который хранит булевы значения для указания того, что некоторый i-ый элемент должен быть в списке.
'''Exists''' - список, который хранит булевы значения для указания того, что некоторый i-ый элемент должен быть в списке.
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 149: Строка 149:
if Exists[i]:
if Exists[i]:
print(str(L[i]) + ' ')
print(str(L[i]) + ' ')
</syntaxhighlight>
</source>
[[Обработка_массивов_в_PascalABC.Net#Исключение одинаковых элементов массива|Смотрите также: реализация на PascalABC.Net.]]
[[Обработка_массивов_в_PascalABC.Net#Исключение одинаковых элементов массива|Смотрите также: реализация на PascalABC.Net.]]


==Максимальные элементы столбцов==
==Максимальные элементы столбцов==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 178: Строка 178:
print('Максимумы:')
print('Максимумы:')
print(Max)
print(Max)
</syntaxhighlight>
</source>


==Минимальные элементы на пересечении строк и столбцов==
==Минимальные элементы на пересечении строк и столбцов==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 223: Строка 223:
else:
else:
print('Индексы минимального элемента {0} равны [{1}, {2}].'.format(Min, MinI, MinJ))
print('Индексы минимального элемента {0} равны [{1}, {2}].'.format(Min, MinI, MinJ))
</syntaxhighlight>
</source>


==Двузначные числа, кратные 2==
==Двузначные числа, кратные 2==
<source lang="python">
<syntaxhighlight lang="python">
import math, random
import math, random


Строка 253: Строка 253:


print('Количество двузначных чисел с четной суммой цифр равно {0}.'.format(C))
print('Количество двузначных чисел с четной суммой цифр равно {0}.'.format(C))
</syntaxhighlight>
</source>


==Поменять местами строки двумерного списка==
==Поменять местами строки двумерного списка==
<source lang="python">
<syntaxhighlight lang="python">
import random
import random


Строка 283: Строка 283:
Print(L)
Print(L)
</syntaxhighlight>
</source>


==Совершенные числа==
==Совершенные числа==
<source lang="python">
<syntaxhighlight lang="python">
L = list()
L = list()


Строка 298: Строка 298:


print(L)
print(L)
</syntaxhighlight>
</source>
[[Обработка_массивов_в_PascalABC.Net#Совершенные числа|Смотрите также: реализация на PascalABC.Net.]]
[[Обработка_массивов_в_PascalABC.Net#Совершенные числа|Смотрите также: реализация на PascalABC.Net.]]
==Сумма чисел многомерного списка==
==Сумма чисел многомерного списка==
<source lang="python">def Sum(a):
<syntaxhighlight lang="python">def Sum(a):
if type(a) is int:
if type(a) is int:
return a
return a
Строка 311: Строка 311:


L = [[1, 2], 3, [4, [5, 6]], 7, [8]]
L = [[1, 2], 3, [4, [5, 6]], 7, [8]]
print(Sum(L))</source>
print(Sum(L))</syntaxhighlight>

Текущая версия от 15:54, 16 апреля 2020

К оглавлению | Назад | Вперёд

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

Сортировки[править]

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

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))