机器学习——Python(四)
此处主要练习的是:Python的高级特性:切片、列表生成公式、迭代、生成器
#coding:utf-8
print "-------------切片----------------------"
# 定义一个数组
L=[1,2,3,4,5,5]
# 访问数组的指定区间的元素
print "访问数组的第2个到第4个元素",L[1:3]#注意此处返回 [2, 3],但是我的原意是访问包含第四个元素,但是并没有第四个元素
# 此处需要注意的是,L[m,n] 访问的元素不包含下标为n的元素,所以要想访问下标为 n的元素,需要将末尾元素+1
print "访问数组的第2个到第4个元素",L[1:4]
print "起始值缺省为0",L[:4]
print "-------------range函数的使用----------------------"
L=range(100)
print "range(100)函数 ",L
print "取倒数前十个元素 ",L[-10:]
print "取前90个元素",L[:-10]
#由上面的表达式我们可以看出 对于数组的范围[-99,99],
#取全部元素的方式有:[-99:0] [0:99] 这样两种表达方式
#这里非常要注意的是:每5个取一个的情况,这恰好也是5 的等差数列
print "每5个取值一个",L[::5]
print "前十个数字每两个取一个",L[:10:2]
# 迭代数据可以是:数组、字符串、字典(字典的key、value、key-value都可以迭代)
print "--------------迭代数据练习----------------------"
print "--------------迭代字典----------------------"
dic = {"name: ":"caiqiang","age: ":"13","city:":"beijing"}
# for x in dic.keys():
# for x in dic:\
for x in dic.iterkeys():
print "字典key的迭代 ",x
# for x in dic.values():\
# for x in dic.itervalues():
# for x in dic: 在迭代value时,只能用value实现
for x in dic.itervalues():
print "字典value的迭代: ",x
for x in dic.iteritems():
print "字典key-value的迭代: ",x
print "---------------迭代字符串-----------------------"
str = "abcdef"
for x in str:
print "迭代字符串中字符 ",x
print "---------------判定数据类型是否可迭代-----------------------"
from collections import Iterable
print "整型数据是否可迭代 ",isinstance(2,Iterable)
print "字符串是否可迭代 ",isinstance("asdf",Iterable)
print "---------------带有下标的迭代列表,类似Java中的遍历方式-----------------------"
for i,value in enumerate([1,3,2,3,4]):
print "索引值 ",i," 数组中的元素值 ",value
print "--------------对两个变量同时迭代-----------------------"
for x,y in [(1,2),(3,4)]:
print "对两个变量同时访问 ",x,y
print "--------------列表生成器-----------------------"
print range(1,11)
# 使用循环生成
L = []
for n in range(1,11):
L.append(n*n)
print "使用循环生成 ",L
# for x*x in range(1,11):
L=[x*x for x in range(1,11)]#公式是 [列表内元素(可以是表达式) for x(构成元素的单位元素) in range(m,n)(元素的集合)]
print "使用列表生成式 ",L
#对元素进行筛选,可在 上面的生成式后面添加 if表达式
L=[x*x for x in range(1,11) if x%2==0]
print "带有筛选的列表生成式 ",L
#使用双层循环 可以生成全排列 公式=[列表中的元素 for 构成元素因子1 in 因子1所在的集合 for 构成元素因子2 in 因子2所在集合]
L=[m+n for m in 'ABC' for n in 'XYZ']
print L
print "--------------将字典转化为键值对的数组-----------------------"
dic = {"name: ":"caiqiang","age: ":"12","city: ":"beijing"}
L = [k+'='+v for k,v in dic.iteritems()]
print L
print "--------------将字典转化为键值对的数组-----------------------"
s="HELLOWORLDMYNAME"
L=["HELLO","WORLD","MY","NAME",2,3]
L1=[s1.lower() for s1 in s]
L2=[s2.lower() for s2 in L if isinstance(s2,Iterable)]
print L1,L2
print "--------------生成器-----------------------"
# 主要是针对,一次性生成较大的列表,会使内存占用过多,所以可以考虑在使用的时候,逻辑生成,这就是生成器的作用
L=[x*x for x in range(1,11)]
g=(x*x for x in range(1,11))
print "列表生成式 ",L,"生成器 ",g
# for n in range(1,11):
# while n > 1:
# n= n - 1
# print "依然使用for循环 ",g.next()
for n in g:
print "n in g 的方式迭代 ",g.next()