【Python实用技法第7篇:字典上对数据执行计算:求最小值、最大值、排序】教程文章相关的互联网学习教程文章

Python插入排序如何工作?【代码】

这是插入排序的Python实现,我试图遵循纸上的值但是一旦计数变量我变得比len(s)更大我不知道该做什么,它如何/为什么它仍然运行?def sort_numbers(s):for i in range(1, len(s)):val = s[i]j = i - 1while (j >= 0) and (s[j] > val):s[j+1] = s[j]j = j - 1s[j+1] = valdef main():x = eval(input("Enter numbers to be sorted: "))x = list(x)sort_numbers(x)print(x)解决方法:或者,这一个:def ins_sort(k):for i in range(1,len...

python – 按列表中出现的频率对列表进行排序【代码】

我有一个整数列表(或者甚至可以是字符串),我想根据Python中出现的频率对其进行排序,例如:a = [1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5]元素5在列表中出现4次,4次出现3次.所以输出排序列表将是:result = [5, 5, 5, 5, 3, 3, 3, 4, 4, 4, 1, 1, 2]我尝试使用a.count(),但它给出了元素的出现次数.我想对它进行排序.知道怎么做吗? 谢谢解决方法: from collections import Counter print [item for items, c in Counter(a).most_comm...

快速排序算法__python实现

快速排序算法(quick sort): 一.基本思想(分治) 先用一趟排序将原始数组分割成两个独立部分,其中一个部分都比另一个部分小,再继续对分成的两个部分分别进行快速排序,整个过程递归进行,最后整个数组成为有序序列。 二.基本步骤 1. 从数列中挑出一个元素,作为“基准”(pivot),[随机取三个数,再取这三个数中的中值]或者[取第一,最后,中间再取中值]; 2. 分区操作:重排数列,比基准值小的全部放在基准值前面,比基准值大...

python基础之冒泡排序【代码】

list_pratisce = [45,69,8,19,9] n = len(list_pratisce) for j in range(n):for i in range(n-1):if list_pratisce[i] > list_pratisce[i+1]:temp = list_pratisce[i]list_pratisce[i] = list_pratisce[i+1]list_pratisce[i+1] = temp print(list_pratisce) 输出结果: [8, 9, 19, 45, 69]

python 快速排序

快速排序是冒泡排序的升级版。主要思想就是在序列中选出一个关键字作为枢轴,把比它小的关键字移动到它前面,比它大的关键字移动到后边,将整个序列分为两部分。接着再分别对每个子序列重复上面的操作,直到子序列中只剩下一个关键字为止。 代码参照大话数据结构,主要利用了递归的思想:def quickSort(arr,low,high):pivot=0if low<high:pivot = partition(arr,low,high)quickSort(arr,low,pivot-1)quickSort(arr,pivot+1,high)de...

python – 将数组排序到索引数组指定的bin中的最有效方法?【代码】

任务示例:data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) idx = np.array([2, 0, 1, 1, 2, 0, 1, 1, 2])预期结果:binned = np.array([2, 6, 3, 4, 7, 8, 1, 5, 9])约束: >应该快.>应为O(n k),其中n是数据长度,k是bin的数量.>应该是稳定的,即保留在箱内的订单. 明显的解决方案data[np.argsort(idx, kind='stable')]是O(n log n). O(n k)解决方案def sort_to_bins(idx, data, mx=-1):if mx==-1:mx = idx.max() + 1cnts = np.zero...

python – 对列表进行排序以形成最大可能的数字【代码】

我正在尝试编写一个给出非负整数列表的函数,将它们排列成最大可能的数字. 例如,给定[50,2,1,9],最大形成数为95021. 这是我试图解决问题的代码:a = [50, 2, 1, 9] a.sort() ans = [] for i in range(len(a)-1,-1,-1):ans.append(a[i])print ''.join(map(str,ans))但是,我得到50921,因为50是最大的,但它应该首先显示9.解决方法:在Python 2中,您可以使用传递给sort的适当比较函数来完成此操作.#!/usr/bin/env python''' Sort a list ...

python – 为具有多个维度的numpy.argsort排序不变量【代码】

numpy.argsort文档说明Returns:index_array : ndarray, intArray of indices that sort a along the specified axis. If a is one-dimensional, a[index_array] yields a sorted a.如何将numpy.argsort的结果应用于多维数组以获取已排序的数组? (不只是1-D或2-D阵列;它可以是N维数组,其中N仅在运行时已知)>>> import numpy as np >>> np.random.seed(123) >>> A = np.random.randn(3,2) >>> A array([[-1.0856306 , 0.99734545],...

python3合并排序【代码】

list1 = [21, 44, 50, 88, 999] list2 = [99, 11, 24, 19, 999] list3 = []def select_sort(data, size):for base in range(size - 1):small = sizefor j in range(base + 1, size):if data[j] < data[small]:small = jdata[small], data[base] = data[base], data[small]def my_merge():global list1global list2global list3index1 = 0index2 = 0for index3 in range(len(list1) + len(list2) - 2):if list1[index1] < list2[ind...

python基数排序【代码】

import random# 设置data范围 def i_d(data, size):for i in range(size):data[i] = random.randint(0, 999)# 打印数据 def o_d(data, size):for i in range(size):print('%5d' % data[i], end='')def radix(data, size):n = 1while n <= 100:tmp = [[0] * 100 for i in range(10)]for i in range(size):m = (data[i] // n) % 10tmp[m][i] = data[i]k = 0for i in range(10):for j in range(size):if tmp[i][j] != 0:data[k] = tmp...

python希尔排序【代码】

data = [16, 25, 39, 27, 12, 8, 45, 63]def shell():k = 1y = 8jmp = y // 2while jmp != 0:for i in range(jmp, y):tmp = data[i]j = i - jmpwhile tmp < data[j] and j >= 0:data[j + jmp] = data[j]j = j - jmpdata[jmp + j] = tmpprint('%d' % k, end='')k = k + 1jmp = jmp // 2for a in range(8):print('%3d' % data[a], end='')print()shell() ''' 直接插入排序算法的一种更高效的改进版本。 1.划分指定区块 2.分别使用插入...

python快速选择排序【代码】

import randomdef input1(data, size):for i in range(size):data[i] = random.randint(1, 100)def show(data, size):for i in range(size):print('%3d' % data[i], end='')print()def quick(d, size, l, r):# 数据,长度,左,右if l < r:l_i = l + 1while d[l_i] < d[l]:if l_i + 1 > size:breakl_i += 1r_i = rwhile d[r_i] > d[l]:r_i -= 1while l_i < r_i:d[l_i], d[r_i] = d[r_i], d[l_i]l_i += 1while d[l_i] < d[l]:l_i +...

在Python中,如何按排序键顺序迭代字典?【代码】

现有的函数以下结尾,其中d是字典:return d.iteritems()返回给定字典的未排序迭代器.我想返回一个遍历按键排序的项目的迭代器.我怎么做?解决方法:没有对此进行过广泛的测试,但是在Python 2.5.2中有效.>>> d = {"x":2, "h":15, "a":2222} >>> it = iter(sorted(d.iteritems())) >>> it.next() ('a', 2222) >>> it.next() ('h', 15) >>> it.next() ('x', 2) >>>如果您习惯于在d.iteritems()中执行key,value:…而不是迭代器,这仍将适...

如何在Python 3.x中获得类似2.x的排序行为?【代码】

我试图在3.x中复制(并且如果可能的话)Python 2.x的排序行为,以便像int,float等相互可订购的类型按预期排序,并且相互不可共享的类型在输出中分组. 这是我正在谈论的一个例子:>>> sorted([0, 'one', 2.3, 'four', -5]) # Python 2.x [-5, 0, 2.3, 'four', 'one']>>> sorted([0, 'one', 2.3, 'four', -5]) # Python 3.x Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: unorderable types: str...

python – 自然地排序Pandas DataFrame【代码】

我有一个带有索引的pandas DataFrame,我想自然排序. Natsort似乎不起作用.在构建DataFrame之前对索引进行排序似乎没有帮助,因为我对DataFrame的操作似乎搞乱了进程中的排序.关于如何自然地采用指数的任何想法?from natsort import natsorted import pandas as pd# An unsorted list of strings a = ['0hr', '128hr', '72hr', '48hr', '96hr'] # Sorted incorrectly b = sorted(a) # Naturally Sorted c = natsorted(a)# Use a as...