python中的a in b for a in c如何理解?

Python07

python中的a in b for a in c如何理解?,第1张

我很理解你的疑惑,我相信这个对任何一个第一次接触到这种写法的人都有疑惑,不过我已经明白它的执行顺序,其实最容易明白的就是写一个等效写法,“a in b for b in c”的写法跟“x for x in y”的写法并没有本质上的区别,只不过前者输出的b又作为“in”的参数继续运算一次而已(同理它还可以是其它运算,未必是a in b,只不过现在它是一个列表,如果c是一维的列表,那循环一次出来的b就是单个元素,假设它是数字,那就可以执行比如b+1 for b in c这种操作),这种一般都用于生成一个列表,说再多不如举个例子(以下例子皆为实测通过):

```

# 二维数组(在python中这个叫列表)

c = [[7, 8, 9], [1, 2, 3], [4, 5, 6]]

# 简易写法,结果: [7, 8, 9, 1, 2, 3, 4, 5, 6]

l1 = [a for b in c for a in b]

print(l1)

# 常规写法(相当于上边的简易写法),结果: [7, 8, 9, 1, 2, 3, 4, 5, 6]

l2 = []

for b in c:

for a in b:

l2.append(a)

print(l2)

# 上述的a还可以作为参数继续传入其它函数或在表达式中使用,比如作为in的参数,结果: [False, True, False]

# 解释一下执行顺序:先执行for in,循环一次就出来一个b,然后再执行num in b,num in b的结果(True/False)作为列表的

# 一个元素,至此一个循环结束,然后又开始下一个for in循环,直到所有元素循环完,最后产生一个元素值为True/False组成的列表!

num = 3

l3 = [num in b for b in c]

print(l3)

# 上面写法相当于

l4 = []

for b in c:

l4.append(num in b)

print(l4)

# a在表达式中参与表达式运算

# 结果:[8, 9, 10, 2, 3, 4, 5, 6, 7]

l5 = [a+1 for b in c for a in b]

print(l5)

# 该写法是上述写法的常规写法

l6 = []

for b in c:

for a in b:

l6.append(a+1)

print(l6)

```

提交答案后,发现百度会把空格缩进全都去掉,而缩进作为python的灵魂,没有了缩进的python代码根本没办法运行,所以我给你截个图,你复制代码后自己去缩进吧:

python的一种写法:a in b for b in c

又一次修改答案,这次我要吐槽一下,不要来这里问关于代码的问题,前面的代码你也看到了,百度知道根本无法嵌入代码,直接把代码当普通文本,空格缩进全给你去掉,然后我想着,好,文本的空格被你去掉我上传图片总行了吧?结果,这图片被压缩的模糊不清,勉强能看见,将就着看吧。

怎么学python

俗话说得好,“摩天大楼从地起”,学习任何编程语言都一定要把该语言的基础打牢,而怎么打地基呢?秘诀只有一条:多敲代码多敲代码多敲代码。学习前期建议找一本讲python基础的书或博客,把里面的例题跟着操作一遍,在基础打扎实后,可上一些比较出名的竞赛项目的网站如kaggle等,通过做项目去巩固知识。

推荐书籍:《Python基础教程(第3版)》Magnus Lie Hetland著

推荐理由:全面介绍了Python的基础知识、基本概念,高级主题,还有Python程序测试、打包、发布等知识,及10个具有实际意义的Python项目的开发过程,涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。

基础知识

代码规范

1. 缩进

相比于其他语言用大括号和end来标识代码块,python语言比较“独特”,其通过代码的缩进来标识所属代码块,通常4个空格为一个缩进,可用tab键实现。缩进是python代码的重要组成部分,若你的代码缩进格式不正确,如同一段代码块语句缩进不一致,首句未顶格等,都会运行出错。

#一个完整的语句首句要顶格

i=0

#同一代码块的语句应缩进一致

for i in range(5):

print(i)

i+=1

2. 注释

编程语言的注释,即对代码的解释和说明。给代码加上注释,可提高代码的可读性,当你阅读一段他人写的代码时,通过注释迅速掌握代码的大致意思,读起代码将更加得心应手。

python语言的注释分为单行注释和多行注释,在注释符后的内容计算机会自动跳过不去执行。

单行注释:在需注释语句前加“#”,可在代码后使用,也可另起一行使用

i=1 #在代码后使用注释

#另起一行使用注释

多行注释:在语句开头和结尾处加三个单引号或三个双引号(前后须一致)

'''

使用单引号的多行注释

'''

"""

使用双引号的多行注释

"""

使用注释除了起到望文生义,迅速了解代码意思的作用外,还有一个小妙处,可以将某段未完成或需要修改的代码隐蔽起来,暂时不让计算机执行。

3. 多行语句

python中默认以行结束作为代码结束的标记,而有时候为了阅读方便,我们需要将一个完整代码跨行表示,这时候我们可以使用续行符:反斜杠“\”来将一行语句分为多行显示:

score = eng_score + \

math_score + \

his_score

注意:若语句中使用大括号{}、中括号[]或小括号()将数据括起来,则不需要使用续行符,如下所示:

name=['Ada','Ailsa','Amy',

'Barbara','Betty','Blanche'

'Carina','Carrie','Carry'

'Daisy','Darcy','Diana']

什么是算法

在学习使用python之前,要先明确使用python的目的是什么?作为一名数据分析工作者,我们并不需要使用python语言来设计程序,只需要使用python来完成算法的实现。那么算法又是什么呢?

算法是指解决某项问题的流程或步骤,我们可以用一个很贴近生活的例子去理解,假如你需要做一道“西红柿炒鸡蛋”,根据菜谱:先准备食材,然后下油热锅,将西红柿倒进去翻炒后,加入蛋液翻炒至熟。

这就是我们完成“西红柿炒鸡蛋”这道菜所用的“算法”,而完成这个算法所需要的就是原料和操作说明,下面来看看原料和说明是什么。

变量

Python语言中的“原料”即对象,在python里万物皆对象,而对象通过引用变量唯一存在,引用上面的例子,可以将”鸡蛋”理解为”对象”,而给它取的名字”小红家鸡生的蛋”则是”变量”。

变量的概念想必大家不会陌生,和中学方程中学的变量基本上是一致的.变量可以理解为对事物的一个代号或者贴的一个标签,是一个可重复使用的量而不同于方程中的变量,编程语言中的变量不仅仅是数值型, 还可以是字符型、逻辑型等其他数据类型。

1. 变量的性质

先定义后使用在python中引用变量需要先定义,否则会报错,但与其他编程语言如C语言不同,python定义变量不需要事先定义变量类型,变量类型随变量所赋值的类型决定可重复赋值及运算在python中变量可以重复赋值使用,变量间也可相互赋值,同时可以对变量进行运算操作#变量可重复赋值

i=2

i=3

#可对变量做运算

i+1

#查看变量的数据类型

type(a)

2. 变量的命名规则

只能包含:数字、字母、下划线不能以数字开头,不能包含python保留字、关键字、函数名慎用小写字母l和大写字母O, 避免与数字1和0混淆建议用驼峰命名法,即以单词加“"命名,如:studentname#查看python有哪些保留字

import keyword

print(keyword.kwlist)

3. 变量的赋值

基本赋值在python中,我们使用“=”对变量进行赋值,如“x=3"。这里要注意,数据和变量是分开存储的,即在内存中先建立数据“3”,然后建立一个标记“x”,再将x指向内存中的值。若重新对变量x赋值为“2”,实质上是修改了数据的引用,变量x重新指向内存中的数据“2”。

多重赋值对同一对象可以引用多个变量,例如一个人可以有多重身份,Mr Li 是一位父亲,同时也是一位教师,不同的变量,实质指向的对象是同一事物。father = teacher = 'Mr Li'

多元赋值对多个变量同时赋值,等号两边可加括号可不加a,b,c=1,2,3

(a,b,c)=(1,2,3)

语句

了解完算法中的“原料”,我们再来看看算法中的“操作说明”是什么呢?算法中的“操作说明”可以说是算法的“灵魂”,就好像一道菜完成的作品如何,很大程度取决于厨师的厨艺(即做菜秘籍)。构成算法“操作步骤”的是语句,其中包含python的基本语句和控制流程语句。控制流程语句的语法相对较复杂,在后面的文章再继续介绍,我们先认识一下python的基本语句:

其实前面我们已经接触过python的基础语句:赋值语句,赋值语句较简单不展开介绍,下面主要介绍python另一个使用特别广泛的基础语句:输出与输入语句。

1. 输出语句

python中输出值的方式主要有两种:表达式和print( )函数,两者的区别在于,表达式输出的结果为一个python对象,而在实际运用中,为方便阅读,通常需要按照一定格式输出结果,print( )函数就很好地解决此问题。

print( )语法:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

print( )参数:

objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。sep -- 用来间隔多个对象,默认值是一个空格。end -- 用来设定以什么结尾。默认值是换行符 “\n”,可换成其他字符串。file -- 要写入的文件对象。flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。#打印多个值,设置中间分隔符为“-”

print("广州","上海","深圳",sep="-")

#先以默认结尾符"\n"输出,再以结尾符设置为“-”,注意区别二者区别

print("广州")

print("上海")

print("深圳")

print("广州",end="-")

print("上海",end="-")

print("深圳",end="-")

以上代码实行结果为:

2. 输入语句

在python中获取键盘输入数据的函数是input()函数,input函数会自动将输入的数据转为字符串类型,并自动忽略换行符,同时可给出提示字符串。如果需要得到其他类型的数据,可对其进行强制性类型转换。

input( )语法:

input([prompt])

input( )参数:

prompt: 给输入者的提示信息,可选参数age=input("请输入您的年龄:")

计算机的概念:计算机是 根据指令操作数据的设备

计算机具有 功能性 可编程性。

功能性,指对数据的操作,表现为数据计算、输入输出处理和结果存储等。

可编程性,指根据一系列指令自动地、可预测地、准确地完成操作者的意图。

计算机的发展参照 摩尔定律 ,表现为指数方式。

计算机硬件所依赖的集成电路规模参照摩尔定律发展,计算机运行速度因此也接近几何级数快速增长,计算机高效支撑的各类运算功能不断丰富发展。

摩尔定律 Moore’s Law——计算机发展 历史 上最重要的预测法则

Intel公司创始人之一戈登·摩尔在1965年提出单位面积集成电路上可容纳晶体管的数量约每两年翻一番,CPU/GPU、内存、硬盘、电子产品价格等都遵循摩尔定律。计算机是当今世界,唯一长达50年有效且按照指数发展的技术领域,计算机深刻改变人类 社会 ,甚至可能改变人类本身,可预见的未来30年,摩尔定律还将持续有效。

程序设计

程序设计是计算机可编程性的体现。

程序设计,亦称编程,是深度应用计算机的主要手段,程序设计已经成为当今 社会 需求量最大的职业技能之一,很多岗位都将被计算机程序接管,程序设计将是生存技能。

程序设计语言

程序设计语言是一种用于交互(交流)的人造语言。

程序设计语言,亦称编程语言,是程序设计的具体实现方式,编程语言相比自然语言更简单、更严谨、更精确,编程语言相比自然语言更简单、更严谨、更精确。

编程语言种类很多,但生命力强劲的却不多。编程语言有超过600种,绝大部分都不再被使用。C语言诞生于1972年,它是第一个被广泛使用的编程语言,Python语言诞生于1990年,它是最流行最好用的编程语言。

编程语言的执行方式

计算机执行源程序的两种方式:编译和解释。

源代码:采用某种编程语言编写的计算机程序,人类可读。

例如:result = 2 + 3

目标代码:计算机可直接执行,人类不可读 (专家除外)。

例如:11010010 00111011

编译

将源代码一次性转换成目标代码的过程。

执行编译过程的程序叫作编译器(compiler)。

解释

将源代码逐条转换成目标代码同时逐条运行的过程

执行解释过程的程序叫做解释器(interpreter)。

编译和解释

编译:一次性翻译,之后不再需要源代码(类似英文翻译)。

解释:每次程序运行时随翻译随执行(类似实时的同声传译)。

静态语言和脚本语言

根据执行方式不同,编程语言分为两类。

静态语言:使用编译执行的编程语言,如C/C++语言、Java语言。

脚本语言:使用解释执行的编程语言,如Python语言、JavaScript语言、PHP语言。

执行方式不同,优势也各有不同。

静态语言:编译器一次性生成目标代码,优化更充分,程序运行速度更快。

脚本语言:执行程序时需要源代码,维护更灵活,源代码在维护灵活、跨多个操作系统平台。

IPO

程序的基本编写方法。

I:Input 输入,程序的输入。

P:Process 处理,是程序的主要逻辑。

O:Output 输出,程序的输出。

理解IPO

输入 ,程序的输入 文件输入、网络输入、控制台输入、交互界面输入、内部参数输入等,输入是一个程序的开始。

输出 ,程序的输出,控制台输出、图形输出、文件输出、网络输出、操作系统内部变量输出等,输出是程序展示运算结果的方式。

处理 ,处理是程序对输入数据进行计算产生输出结果的过程,处理方法统称为 算法 ,它是程序最重要的部分,算法是一个程序的灵魂。

问题的计算部分

一个待解决的问题中,可以用程序辅助完成的部分。

计算机只能解决计算问题,即问题的计算部分,一个问题可能有多种角度理解,产生不同的计算部分,问题的计算部分一般都有输入、处理和输出过程。

编程解决问题的步骤

6个步骤 (1-6)

分析问题 :分析问题的计算部分,想清楚。

划分边界 :划分问题的功能边界,规划IPO。

编写程序 :编写问题的计算机程序,编程序。

调试测试 :调试程序是正确运行的,运行调试。

升级维护 :适应问题的升级维护,更新完善。

求解计算问题的精简步骤

3个精简步骤

确定IPO :明确计算部分及功能边界。

编写程序 :将计算求解的设计变成现实。

调试程序 :确保程序按照正确逻辑能够正确运行。

编程能够训练思维

编程体现了一种抽象交互关系、自动化执行的思维模式。计算思维:区别逻辑思维和实证思维的第三种思维模式。能够促进人类思考,增进观察力和深化对交互关系的理解。

编程能够增进认识

编程不单纯是求解计算问题。不仅要思考解决方法,还要思考用户体验、执行效率等方面。能够帮助程序员加深对用户行为以及 社会 和文化的认识。

编程能够带来乐趣

编程能够提供展示自身思想和能力的舞台。让世界增加新的颜色、让自己变得更酷、提升心理满足感。在信息空间里思考创新、将创新变为现实。

编程能够提高效率

能够更好地利用计算机解决问题。显著提高工作、生活和学习效率。为个人理想实现提供一种借助计算机的高效手段。

编程带来就业机会

程序员是信息时代最重要的工作岗位之一。国内外对程序员岗位的缺口都在百万以上规模。计算机已经渗透于各个行业, 就业前景非常广阔。

学习编程的误区

Q:编程很难学吗? A:掌握方法就很容易!

首先,掌握编程语言的语法,熟悉基本概念和逻辑。其次,结合计算问题思考程序结构,会使用编程套路。最后,参照案例多练习多实践,学会举一反三次。