列表推导式生成列表对象,语法如下:
[表达式 for item in 可迭代对象]
或者:{表达式 for item in 可迭代对象 if 条件判断}
>>>[xforxinrange(1,5)][1,2,3,4]>>>[x*2forxinrange(1,5)][2,4,6,8]>>>[x*2forxinrange(1,20)ifx%5==0][10,20,30]>>>[aforain'abcdefg']['a','b','c','d','e','f','g']>>>cells=[(row,col)forrowinrange(1,10)forcolinrange(1,10)]#可以使用两个循环>>>forcellincells:print(cell)
字典的推导式生成字典对象,格式如下:
{key_expression : value_expression for 表达式 in 可迭代对象}
类似于列表推导式,字典推导也可以增加if条件判断,多几个for循环。
#统计文本中字符出现的次数>>>my_text='iloveyou,ilovesxt,ilovegaoqi'>>>char_count={c:my_text.count(c)forcinmy_text}>>>char_count{'':9,'i':4,'l':3,'o':5,'v':3,'e':3,'y':1,'u':1,',':2,'s':1,'x':1,'t':1,'g':1,'a':1,'q':1}
统计字符中单词出现的次数
下面这道题在面试的比试中考过
# 统计字符中单词出现的次数#方法1:推导式my_text='iloveyou,ilovesxt,ilovegaoqi'char_count={c :my_text.count(c) for c in my_text}print(char_count){'think': 1, 'I': 1, 'can': 2, 'because': 1, 'i': 2}
#方法2:字典def count(str): count_words = str.split() count_word = {} for word in count_words: if word not in count_word.keys(): count_word[word] = 1 else: count_word[word] += 1 return count_word print(count('I can because i think i can')){'I': 1, 'can': 2, 'because': 1, 'i': 2, 'think': 1}
#方法三 使用collections的Counterfrom collections import Counterstr = 'I can because i think i can'counts = Counter(str.split())print(counts)Counter({'can': 2, 'i': 2, 'I': 1, 'because': 1, 'think': 1})
集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象}
或者 {表达式 for item in 可迭代对象 if 条件判断}
>>>{xforxinrange(1,100)ifx%9==0}{99,36,72,9,45,81,18,54,90,27,63}
生成器推导式(生成元组)
元组有推导式吗,能不能用小括号生成?
>>>(x for x in range(1,100) if x%9==0)<generator object <genexpr> at 0x0000020A0FEF98E0>
发现提示的是“一个生成器对象。显然,元组没有推导式。
一个生成器只能运行一次。第一次迭代可得到数据,第二次迭代发现数据已经没有了。
>>>gnt=(xforxinrange(1,100)ifx%9==0)>>>forxingnt:print(x,end='')918273645546372819099>>>forxingnt:print(x,end='')>>>
#绘制多个同心圆import turtlet=turtle.Pen()my_colors=('red','green','yellow','black')t.width(4)t.speed(1)for i in range(10):#0 1 2 3 4 t.penup() t.goto(0,-i*10) #0,-100,-200,-300,-400 t.pendown() t.color(my_colors[i%len(my_colors)]) t.circle(15+i*10)#100,200,300,400,,500turtle.done()
#绘制18*18棋盘#画棋盘import turtlewidth=30num=18x1=[(-400,400),(-400+width*num,400)]y1=[(-400,400),(-400,400-width*num)]t=turtle.Pen()t.speed(10)#t.goto(x1[0][0],x1[0][1])#t.goto(x1[1][0],x1[1][1])for i in range(0,19): t.penup() t.goto(x1[0][0],x1[0][1]-30*i) t.pendown() t.goto(x1[1][0],x1[1][1]-30*i)for i in range(0,19): t.penup() t.goto(y1[0][0]+30*i,y1[0][1]) t.pendown() t.goto(y1[1][0]+30*i,y1[1][1])t.hideturtle()#隐藏画笔turtle.done()#保证运行窗口不被自动关闭
联系客服