Python 实现经典排序算法


插入排序:
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

def insert_sort(lists):
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        j = i - 1
        while j >= 0:
            if lists[j] > key:
                lists[j + 1] = lists[j]
                lists[j] = key
            j -= 1
    return lists

阅读全文

Python dict 排序


对 dict 排序的方法,主要是把 dict 中的元素分离出来放到一个 list 中,对 list 排序,从而间接实现对 dict 的排序。
这个"元素"可以是 key、value 或者 item。

# -*- coding: utf-8 -*-

adict = {
    "a" : 2,
    "c" : 1,
    "b" : 3
}

def sortedDictValues1(self):
    items = self.items()
    items.sort()
    return [value for key, value in items]

newAdict1 = sortedDictValues1(adict)
print newAdict1

def sortedDictValues2(self):
    keys = self.keys()
    keys.sort()
    return [self[key] for key in keys]

newAdict2 = sortedDictValues2(adict)
print newAdict2

newAdict3 = [(k,adict[k]) for k in sorted(adict.keys())] 
print newAdict3

def sort_by_value(self):
    items = self.items()
    backitems = [[v[1],v[0]] for v in items]
    backitems.sort()
    return [backitems[i][1] for i in range(0,len(backitems))]

newAdict4 = sort_by_value(adict)
print newAdict4

newAdict5 = [ v for v in sorted(adict.values())] 
print newAdict5

newAdict6 = sorted(adict.items(), lambda x, y: cmp(x[1], y[1]))
print newAdict6

newAdict7 = sorted(adict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
print newAdict7

newAdict8 = sorted(adict.items(), key=lambda d: d[0])
print newAdict8

newAdict9 = sorted(adict.items(), key=lambda d: d[1])
print newAdict9
阅读全文

Python 获取昨天、今天、明天


# -*- coding: utf-8 -*-

import datetime
import time

# get date
today = datetime.date.today()
print today

oneday = datetime.timedelta(days=1)
yesterday = today - oneday
print yesterday

tomorrow = today + oneday
print tomorrow
阅读全文

Python 提取文本中的中文


主要是通过中文编码范围匹配

# -*- coding: utf-8 -*-
import re
import sys

reload(sys)
sys.setdefaultencoding("utf8")

def translate(str):
    # 处理前进行相关的处理 包括转换成 Unicode 等
    line = str.strip().decode('utf-8', 'ignore')
    # 中文的编码范围是 \u4e00 到 \u9fa5
    p2 = re.compile(ur'[^\u4e00-\u9fa5]')
    zh = " ".join(p2.split(line)).strip()
    zh = ",".join(zh.split())
    # 经过相关处理后得到中文的文本
    outStr = zh
    return outStr
阅读全文

Python 操作 excel


使用 xlwt 库
写入 excel

import xlwt

wb = xlwt.Workbook()
sh = wb.add_sheet('A Test Sheet')

sh.write(0, 0, 1234.56)
sh.write(1, 0, 8888)
sh.write(2, 0, 'hello')
sh.write(2, 1, 'world')

wb.save('example.xls')

读取 excel

import xlrd

# 打开 xls 文件
book = xlrd.open_workbook("test.xls")
print "表单数量", book.nsheets
print "表单名称", book.sheet_names()
# 获取第1个表单
sh = book.sheet_by_index(0)
print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows, sh.ncols)
print "第二行 第三列", sh.cell_value(1, 2)
# 遍历所有表单
for s in book.sheets():
    for r in range(s.nrows):
        # 输出指定行
        print s.row(r)
阅读全文

Python 循环引用报错


文件名 json.py
代码很简单

import json

data = {'a':"A",'b':"b",'c':3}
print data
print type(data)

代码被执行了两次

{'a': 'A', 'c': 3, 'b': 'b'}
<type 'dict'>
{'a': 'A', 'c': 3, 'b': 'b'}
<type 'dict'>

当 import json 的时候

Traceback (most recent call last):
  File "json.py", line 3, in <module>
    import json
  File "/data/code/Python/Test/json.py", line 9, in <module>
    data_string = json.dumps(data)
AttributeError: 'module' object has no attribute 'dumps'

这证明文件被循环引用了,自己写的 json.py 文件被解析成了系统的 json 包。
把文件重命名成 json1.py,执行成功。

{'a': 'A', 'c': 3, 'b': 'b'}
<type 'dict'>
阅读全文

Python 解析 json


序列化:将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是 JSON、XML 等。
反序列化:从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。

Python2.6 开始加入了 JSON 模块,无需另外下载,Python 的 JSON 模块序列化与反序列化的过程分别是 encoding 和 decoding。

encoding:把一个 Python 对象编码转换成 Json 字符串
decoding:把 Json 格式字符串解码转换成 Python 对象

对于简单数据类型(string、unicode、int、float、list、tuple、dict),可以直接处理。
代码很简单

# -*- coding: utf-8 -*-

import json

data = {'a':"A",'b':"b",'c':3}
print data

data_string = json.dumps(data)
print data_string

decoded = json.loads(data_string)
print decoded

执行结果

{'a': 'A', 'c': 3, 'b': 'b'}
{"a": "A", "c": 3, "b": "b"}
{u'a': u'A', u'c': 3, u'b': u'b'}
阅读全文