Python 入门非常简单,但是对于 Python 的基础知识确也有许多非常重要的内容,为了入门,我决定重新学习一遍 Python。首先从网上的课程开始。
当一个字符串有有需要转义的词的时候,需要用 \
将内容转义,但是如果一个字符串中有太多需要转义的内容的话,就可以使用 raw 标识这个字符串,用来减少 转义的次数。
r'\(-_-)/ \(-_-)/'
对于多行的字符串,可以使用 \n
, 也可以使用 '''
将多行字符串进行表示。即:
'''Python is created by
Guido.
Test'''
对于 Python 中使用中文,可以使用 u''
的形式进行调整,也可以使用 # -*- coding: utf-8 -*-
,这样的话,整个文件都是使用的 utf-8
进行编译,就不会有问题了。
对于 Python 中的 List ,如果想要将数据插入到队尾,要叫使用 append()
方法,如果想插入到一个非队尾的位置,可以使用 insert(position, value)
的方法将数据插入。
L = [1,2,5,6]
L.append(7)
print(L)
L.insert(3, 88)
print(L)
[1, 2, 5, 6, 7]
[1, 2, 5, 88, 6, 7]
而在删除元素的时候,则使用 pop()
方法,而且在移除元素的同时,还会将数据打印出来。
L = [1,2,5,6]
L.append(7)
L.insert(3, 88)
print(L)
L.pop()
print(L)
[1, 2, 5, 88, 6, 7]
[1, 2, 5, 88, 6]
创建 tuple 的时候,需要使用 ()
来创建,但是 ()
本身也是运算符,所以在创建包含一个元素的 tuple 时候,不能简单的使用 t = (1)
这种方案,而是应该使用 t = (1,)
这种形式来创建。
set 持有一系列没有重复的元素,而且是无序的,就像是 dict 的 key 一样。 set 的创建方式是调用 set()
并向其中传一个个 list
。
针对下面的set,给定一个list,对list中的每一个元素,如果在set中,就将其删除,如果不在set中,就添加进去。
s = set([‘Adam’, ‘Lisa’, ‘Paul’])
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for x in L:
if x in s:
s.remove(x)
else:
s.add(x)
print(s)
set(['Bart'])
思考:如果我们认为 s 和 L 是两个同类型的集合,最后做的操作就是找到 仅存在于 L 或者是 仅存在于 s 中的数据。也就是两个集合的差集的合集。
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
m = set(L)
a = s - m
b = m - s
c = a | b
print(c)
set(['Bart'])
这里需要补充一下,对于 set ,a & b 是指的 a 和 b 的交集,a | b 指的 ab 的合集,a - b 和 b - a 都是指的差集,如果是 a - b 则指的是在 a 中存在,但是在 b 中不存在的数据。
汉诺塔 (http://baike.baidu.com/view/191666.htm) 的移动也可以看做是递归函数。
我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:
如果a只有一个圆盘,可以直接移动到c;
如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤:
move(n, a, b, c)
例如,输入 move(2, ‘A’, ‘B’, ‘C’),打印出:
A –> B A –> C B –> C
#-*- coding:utf-8 -*-
# a借b,移c
def move(n, a, b, c):
if n == 1:
print a, '-->', c
return
# a 借 c 移到 b
move(n-1, a,c,b)
# 最后一个移动到 c
print a, '-->', c
# b 借 a 移动到 c
move(n-1, b,a,c)
move(4, 'A', 'B', 'C')
A --> B
A --> C
B --> C
A --> B
C --> A
C --> B
A --> B
A --> C
B --> C
B --> A
C --> A
B --> C
A --> B
A --> C
B --> C
递归思想是非常重要的一种编程思想,在实现过程中,将一个过程拆分成单独的一步,将其中想同的点设计成递归循环,将不同的设计成不同的分支判断,经过这个测试,我的递归思想非常的弱,希望可以着重的做一些递归实现的问题,用来提高自己的代码水平。
默认参数的使用是为了简化函数的调用,可以将常用的数据做为默认值,同时又可以在需要的时候,用传入的参数覆盖掉默认值。
由于参数的顺序要按从左到右的顺序读,所以默认值只能定义在必须的参数右面。
Python 可以支持接受任意个参数的数量,传入的时候使用 def f(*args):
,这样可以在传入之后,当做一个 tuple 去处理变量。
Python 的迭代可以用在任何可以迭代的内容上,包括 list ,tuple,等。迭代永远取出元素本身,而不是元素的索引。
如果想取出元素的索引,可以使用 enumerate() 函数,例如:
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index , value in enumerate(L):
print index , '-', value
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
在 Python 中,迭代 dict 时默认迭代的是其中的 Key 的值,当我们需要使用对应的 value 的值的时候,可以使用 dict.values()
的方法获取所有的 value 值,也可以使用 dict.itervalues()
方法来迭代。
同样在迭代所有元素的时候,希望可以迭代整个对象,可以使用 items()
方法或者使用 iteritems()
方法来获取对象。
[x.upper() for x in L if isinstance(x, str)]
是用来判断每个在 L 中的内容是否是字符串。
利用这种方式,可以将许多方法简化成一个表达式。 其中 ininstance(x,str)
方法可以判断变量 x 是否是字符串。