1、 切片(Slice)

L=['a','b','c','d']

L[0:2]表示从索引0开始取,直到索引2为止,但不包括索引2。即索引01,正好是2个元素

如果第一个索引是0,还可以省略:

L[:2]

L[-1]取倒数第一个元素

L[:]表示从第一个到最后一个,即原样复制一个list

L[::2]去全部数据,但是每两个取一个

字符串逆序:

str = “abcdefg”

str1 = str[::-1]  #  “gfedcba”

#1、去字符串两边的空格

 #1、去字符串2边的空格
def trim(s):
if s=="":
return s
while(s[0]==" "):
s = s[1:]
if s == "":
return s
while(s[-1]==" "):
s = s[:-1]
if s == "":
return s
return s if __name__ == '__main__':
# 1、测试:
if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')

2、迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration),迭代是通过for ... in来完成的

d = {'a':1,'b':2,'c':3,'d':4}

for key in d:

print(key)

for value in d.values():

print(value )

for k ,v in d.items():

print(k,v)

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

for i ,value in enumerate(['a','b','c','d']):

print(i,value)

#2、请使用迭代查找一个list中最小和最大值,并返回一个tuple:

 def findMinAndMax(L):
if len(L) == 0:
return (None, None) max = L[0]
min = L[0]
for num in L:
if num > max:
max = num
if num < min:
min = num
return(min,max) # 测试
if findMinAndMax([]) != (None, None):
print('测试失败!')
elif findMinAndMax([7]) != (7, 7):
print('测试失败!')
elif findMinAndMax([7, 1]) != (1, 7):
print('测试失败!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
print('测试失败!')
else:
print('测试成功!')

3、列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

如果要生成[1x1, 2x2, 3x3, ..., 10x10]:

方法一:循环法:

L = []

for x in range(1,11):

L.append(x*x)

方法二:列表生成式

L = [x * x for  x in range(1,11)]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来

for循环后面还可以加上if判断

L = [x * x for  x in range(1,11) if x % 2 == 0]

还可以使用两层循环,可以生成全排列:

[a * b for a in [1,2,3] for b in [4,5,6]]

最后把一个list中所有的字符串变成小写:

L=["alice","JACk","Steven","Catherine"]

[s.lower() for s in L]

# list中既包含字符串,又包含整数

 def listgenerate():
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if isinstance(s, str)] # 测试:
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('测试通过!')
else:
print('测试失败!')

4、生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

L = [x * x for  x in range(10)]

g =  (x * x for  x in range(10))

创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

通过next()函数获得generator的下一个返回值:next(g)

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现

比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

 def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)#将print(b)改为yield b,就可以变成生成器
a, b = b, a + b
n = n + 1
return 'done'

这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

#输出杨辉三角

 '''
杨辉三角定义如下:
1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
/ \ / \ / \ / \
1 4 6 4 1
/ \ / \ / \ / \ / \
1 5 10 10 5 1
把每一行看做一个list,试写一个generator,不断输出下一行的list:
'''
def triangles():
L = [1]
n = 1
while True:
print(L)
if n>5:
break
S = L[:]
S.append(0)#重点在于此,实现错位相加
L = [S[i-1] + S[i] for i in range(len(S))]
n += 1

5、map()

函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

 def func(x):
return x * x i = map(func, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(i))

Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list

6、reduce

把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

 #比方说对一个序列求和,就可以用reduce实现
from functools import reduce
def add(x, y):
return x+y reduce(add,[1,2,3,4,5,6,7,8,9])
 #序列[1, 2, 3, 4, 5]变换成整数12345
from functools import reduce
def fn(x, y):
return x * 10 + y reduce(fn,[1,2,3,4,5])
 #将字符串转换为整数
from functools import reduce dic = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9} def char2num(ch):
return dic [ch] def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))
 #1、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
def normalize(name):
s = ""
for k,v in enumerate(name):
if k ==0 :
s += (v.upper())
else:
s += (v.lower())
return s # 测试:
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2) '''
2、Python提供的sum()函数可以接受一个list并求和,
请编写一个prod()函数,可以接受一个list并利用reduce()求积:
'''
from functools import reduce
def prod(L): def mul(a,b):
return(a*b) return reduce(mul,L) print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
if prod([3, 5, 7, 9]) == 945:
print('测试成功!')
else:
print('测试失败!') '''
3、利用map和reduce编写一个str2float函数,
把字符串'123.456'转换成浮点数123.456:
'''
DIGITS = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9}
def str2float(s):
a, b = s.split('.') #把字符串拆分成a,b两部分
return str2int(a) + str2int(b)/10**len(b) def str2int(s):
digits = {'':0, '':1, '':2, '':3, '':4, '':5, '':6, '':7, '':8, '':9}
digit_array = map(lambda x: digits[x], s)
return reduce(lambda x, y: x*10 + y, digit_array) def char2num(s): return map(DIGITS[s],s) print('str2float(\'123.456\') =', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.00001:
print('测试成功!')
else:
print('测试失败!')

python小练习-列表、字典的更多相关文章

  1. python之字符串,列表,字典,元组,集合内置方法总结

    目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...

  2. Python基础2 列表 字典 集合

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  3. 【python小随笔】字典的使用

    字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关 ...

  4. 第二周Python笔记 数据类型 列表 字典

    列表,拉锁式儿合并. [ [a,b] for a,b in zip(list1,list2)] #最笨的 a=[1,2,3,4,5] b=[2,3,4,5,6] d=[] for i in range ...

  5. python字符串/元组/列表/字典互转

    #-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...

  6. 转:python字符串/元组/列表/字典互转

    #-*-coding:utf-8-*-  #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ...

  7. python 小白(无编程基础,无计算机基础)的开发之路,辅助知识6 python字符串/元组/列表/字典互转

    神奇的相互转换,小白同学可以看看,很有帮助 #1.字典dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ...

  8. 关于Python元祖,列表,字典,集合的比较

      定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'], ...

  9. Python基础灬列表&字典生成式

    列表生成式 # 求1~10偶数的平方 # 1.常规写法 a_list = [] for i in range(1, 11): if i % 2 == 0: a_list.append(i * i) p ...

随机推荐

  1. 常用的CSS小技巧

    实际开发过程中会遇到一些需要用CSS小技巧处理的布局问题,现在分享几个个人工作中遇到的小问题和解决方案. 1.inline元素间的空白间隙 这里要介绍一个神器font-size:0. 如果你写了个列表 ...

  2. Salesforce吹嘘无代码开发,不用费脑子的人工智能

    Salesforce在星期四举办的Dreamforce '16大会上,开发人员主题演讲可谓面面俱到--听众被舞台包围了,而不是远远地坐在观众席. 这是符合该公司在六月份第一次的开发者大会Trailhe ...

  3. nodejs操作MySQL,mysql连接池及事务的使用

    https://blog.csdn.net/jasnet_u/article/details/88605168

  4. Python爬虫(一)爬百度贴吧

    简单的GET请求: # python2 import urllib2 response = urllib2.urlopen('http://www.baidu.com') html = respons ...

  5. Navicat12.1系列安装,破解以及破解navicat报错的解决方案

    由于上课的需要,我们必须自己下载并安装 Navicat Premium 12,虽然安装过程很简单,但是安装后的navicat只能试用,并没有永久激活,然而我还想永久使用,所以就各种百度,因为不断地遇到 ...

  6. 在Maven项目中添加代码目录下的配置文件

    问题 Maven 是约定大于配置的一种工具, 通常约定在 src/main/resources 目录下放配置文件, 当我们想要在 src/main/java 代码目录下放置配置文件用来测试, Mave ...

  7. Coursera课程笔记----计算导论与C语言基础----Week 8

    C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...

  8. Qt之分模块log

    说明 对于一般的log,使用 qInstallMessageHandler 重定向到文件即可,甚至可以根据日志等级,分类存储.但是并不是适用所有情况,比如,程序运行时动态创建模块,而每个模块需要创建不 ...

  9. 【MySQL基础总结】索引的使用

    索引的使用 概述 1.索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度 2.索引的优点是可以提高检索数据的速度 3.缺点是创建和维护索引需要耗费时间 4.所以索引可以提高查询速度,减 ...

  10. Cassandra数据建模

    1.  概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...