python——字符串、列表、字典、集合、文件操作,循环

一、各种操作

1、字符串

a.字符串格式化输出

name = "x5456"
print "i am %s " % name
  
#输出: i am x5456

PS: 字符串是 %s;整数 %d;浮点数%f

b.查找字符串(find)

str.find(str, start=0, end=len(mystr))   # 检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1

>>> str = 'xinge 好帅'

>>> str.find('xing')
0

>>> str.find('好')
6

c.查找替换字符串中内容(replace)

mystr.replace(str1, str2, mystr.count(str1))  # 把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.

>>> str = 'abcabcabc'

>>> str.replace('a','xinge',2)
'xingebcxingebcabc'

d.以str为分割符切片(split)

mystr.split(str=" ", 2) # 以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串

>>> str = 'a
b	c'

>>> str
'a
b	c'

>>> str.split()
['a', 'b', 'c']

f.将字符串首字母大写(capitalize)

>>> str='abc'

>>> str.capitalize()
'Abc'

g.把字符串的每个单词首字母大写(title)

>>> str = "hello world"

>>> str.title()
'Hello World'

h.startswith,endswith

startswith  # 检查字符串是否是以str 开头, 是则返回 True,否则返回 False

endswith  # 检查字符串是否以str结束,如果是返回True,否则返回 False.

i.upper,lower

upper  # 转换 mystr 中所有字符为大写

lower  # 转换 mystr 中所有字符为小写

j.strip,lstrip,rstrip

strip  # 清除左右两边的空格

lstrip  # 清除左边的空格

rstrip  # 清除右边的空格

k.join

mystr.join(str)  # mystr 中每个字符后面插入str,构造出一个新的字符串

>>> '123'.join('abc')
'a123b123c'

2、列表

a.切片

 1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
 2 >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
 3 ['Tenglan', 'Eric', 'Rain']
 4 
 5 >>> names[1:-1] #取下标1至-1的值,不包括-1
 6 ['Tenglan', 'Eric', 'Rain', 'Tom']
 7 
 8 >>> names[0:3] 
 9 ['Alex', 'Tenglan', 'Eric']
10 
11 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
12 ['Alex', 'Tenglan', 'Eric']
13 
14 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
15 ['Rain', 'Tom', 'Amy'] 
16 
17 >>> names[3:-1] #这样-1就不会被包含了
18 ['Rain', 'Tom']
19 
20 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
21 ['Alex', 'Eric', 'Tom'] 
22 
23 >>> names[::2] #和上句效果一样
24 ['Alex', 'Eric', 'Tom']
View Code

b.追加

1 >>> names
2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
3 
4 >>> names.append("我是新来的")
5 
6 >>> names
7 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
View Code

c.插入

 1 >>> names
 2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
 3 
 4 >>> names.insert(2,"强行从Eric前面插入")
 5 
 6 >>> names
 7 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
 8 
 9 >>> names.insert(5,"从eric后面插入试试新姿势")
10 
11 >>> names
12 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
View Code

d.修改

1 >>> names
2 ['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
3 
4 >>> names[2] = "该换人了"
5 
6 >>> names
7 ['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
View Code

e.删除

 1 >>> del names[2] 
 2 
 3 >>> names
 4 ['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
 5 
 6 >>> del names[4]
 7 
 8 >>> names
 9 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
10 
11 >>> names.remove("Eric") #删除指定元素
12 
13 >>> names
14 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
15 
16 >>> names.pop() #删除列表最后一个值 
17 '我是新来的'
18 
19 >>> names
20 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
View Code

f.列表合并

1 >>> names
2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
3 
4 >>> b = [1,2,3]
5 
6 >>> names.extend(b)
7 
8 >>> names
9 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
View Code

g.浅copy

1 >>> names
2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
3 
4 >>> name_copy = names.copy()
5 
6 >>> name_copy
7 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
View Code

h.深copy

1 import copy
2   
3 n1 = [1,2,3]
4   
5 n2 = copy.deepcopy(n1)
View Code

i.统计

1 >>> names
2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
3 
4 >>> names.count("Amy")
5 2
View Code

j.排序&翻转

 1 >>> names
 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
 3 >>> names.sort() #排序
 4 Traceback (most recent call last):
 5   File "<stdin>", line 1, in <module>
 6 TypeError: unorderable types: int() < str()   #3.0里不同数据类型不能放在一起排序了,擦
 7 >>> names[-3] = '1'
 8 >>> names[-2] = '2'
 9 >>> names[-1] = '3'
10 >>> names
11 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
12 >>> names.sort()
13 >>> names
14 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom']
15 
16 >>> names.reverse() #反转
17 >>> names
18 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
View Code

k.获取下标

1 >>> names
2 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
3 >>> names.index("Amy")
4 2 #只返回找到的第一个下标
View Code

3、元组

元组和列表的区别就是元组不可更改,所以它只有2个方法,count和index。

4、字典(键值对集合)

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

特性:

  • dict是无序的
  • key必须是唯一的,天生去重

a.增加

1 >>> info["stu1104"] = "abc"
2 >>> info
3 {'stu1102': 'x5456', 'stu1104': 'abc', 'stu1103': 'Mali', 'stu1101': 'Wu'}
View Code

b.修改

1 >>> info['stu1101'] = "xinge"
2 >>> info
3 {'stu1102': 'x5456', 'stu1103':  Mali', 'stu1101': 'xinge'}
View Code

c.删除

 1 >>> info
 2 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤兰'}
 3 >>> info.pop("stu1101") #标准删除姿势
 4 '武藤兰'
 5 >>> info
 6 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
 7 >>> del info['stu1103'] #换个姿势删除
 8 >>> info
 9 {'stu1102': 'LongZe Luola'}
10 >>> 
11 >>> 
12 >>> 
13 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
14 >>> info
15 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} #随机删除
16 >>> info.popitem()
17 ('stu1102', 'LongZe Luola')
18 >>> info
19 {'stu1103': 'XiaoZe Maliya'}
View Code

d.查找

 1 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
 2 >>> 
 3 >>> "stu1102" in info #标准用法
 4 True
 5 >>> info.get("stu1102")  #获取
 6 'LongZe Luola'
 7 >>> info["stu1102"] #同上,但是看下面
 8 'LongZe Luola'
 9 >>> info["stu1105"]  #如果一个key不存在,就报错,get不会,不存在只返回None
10 Traceback (most recent call last):
11   File "<stdin>", line 1, in <module>
12 KeyError: 'stu1105'
View Code

e.获取所有键/值

1 #values
2 >>> info.values()
3 dict_values(['LongZe Luola', 'XiaoZe Maliya'])
4 
5 #keys
6 >>> info.keys()
7 dict_keys(['stu1102', 'stu1103'])
View Code

f.字典合并

1 #update 
2 >>> info
3 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
4 >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
5 >>> info.update(b)
6 >>> info
7 {'stu1102': '龙泽萝拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
View Code

g.深copy

import copy
  
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
  
n4 = copy.deepcopy(n1)

h.字典循环

#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
    print(k,v)

5、集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

常用操作:

s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  


a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
  
   
  
基本操作:  
  
t.add('x')            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
   
  
使用remove()可以删除一项:  
  
t.remove('H')  
  
  
len(s)  
set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制

6、文件读写

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件 
f = open('lyrics') #打开文件

first_line = f.readline()

print('first line:',first_line) #读一行

data = f.read()# 读取剩下的所有内容,文件大时不要用

print(data) #打印文件
 
f.close() #关闭文件

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log','r') as f:
     
    ...

二、循环

一、while循环

while 条件:
     
    # 循环体
 
    # 如果条件为真,那么循环体则执行
    # 如果条件为假,那么循环体不执行

二、for循环

用户按照顺序循环可迭代对象中的内容,

li = [11,22,33,44]
for item in li:
    print item
  • break:跳出整个循环
  • continue:跳出当前循环

enumrate

为可迭代的对象添加序号

li = [11,22,33]
for k,v in enumerate(li, 1):
    print(k,v)

range

指定范围,生成指定的数字

print range(1, 10)
# 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
 
print range(1, 10, 2)
# 结果:[1, 3, 5, 7, 9]
 
print range(30, 0, -2)
# 结果:[30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2]  
原文地址:https://www.cnblogs.com/x54256/p/8126861.html