格式化字符串_列表_元组


print()函数查看帮助文件

>>> help(print)
Help on built-in function print in module builtins:

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

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

语法格式:

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

等价于:

print(value1,value2,...,valuen,sep=' ', end='\n', file=sys.stdout, flush=False)
>>> a,b,c,*d=1,2,3,4,5,6,7
>>> a
1
>>> b
2
>>> c
3
>>> d
[4, 5, 6, 7]
>>> print(a,b,c,d,sep="$")
1$2$3$[4, 5, 6, 7]

格式化字符串

%号格式化

占位符

格式描述
%d有符号的整数
%s字符串
%c字符及ASCII码
%o无符号八进制整数
%x/%X无符号十六进制整数
%e/%E浮点数,科学计数法
%f浮点数

%格式化字符串,用%匹配参数,注意个数一一对应

# print("%d" % 6688)
name="dyk"
age=18
print("His name is %s,his age is %d."%(name,age))
print("His name is",name,",his age is",age,".")
print("His name is" + name + ",his age is" + str(age) + ".")

结果:
His name is dyk,his age is 18.
His name is dyk ,his age is 18 .
His name isdyk,his age is18.
>>> a=100
>>> "%d%%"%a
'100%'

format格式化

(1)位置映射

print("{}:{}".format('dyk',18))
print("Name:{},age:{}".format('dyk',18))

结果:
dyk:18
Name:dyk,age:18

(2)关键字映射

print("Name:{},age:{}, {address}".format('dyk',18,address="Gongshu,Hangzhou"))
print("{address},Name:{},age:{}".format('dyk',18,address="Gongshu,Hangzhou"))

结果:
Name:dyk,age:18, Gongshu,Hangzhou
Gongshu,Hangzhou,Name:dyk,age:18

(3)元素访问

print("第一个元素是{0[0]},第二个元素是{0[1]},第三个元素是{0[2]};\
第四个元素是{1[0]},第五个元素是{1[1]}.".format(('www.','google','com'),("baidu.","com")))

结果:
第一个元素是www.,第二个元素是google,第三个元素是com;第四个元素是baidu.,第五个元素是com.

%格式化和format格式化,字符串对齐

列表

列表使用方括号括起来的[],每个元素以逗号分隔;

可以储存不同的数据类型数据

数组

特点:

  • 是一个有序的

  • 可以重复的

  • 可变类型

创建

  • 创建空列表

    li=[]
    print(type(li))
  • 创建多元素列表

    li=[1,2,3,"abcd","city",["i","love","dyk"]]
    print((li,type(li)))
  • 强转

    sr="abcd"
    li=list(sr)
    print((li,type(li)))
    
    结果:
    (['a', 'b', 'c', 'd'], <class 'list'>)

(1)拼接

li1=["I"]
li2=["love","dyk"]
print(li1+li2)

结果:['I', 'love', 'dyk']

(2)重复

li2=["love","dyk"]
print(li2*3)

结果:
['love', 'dyk', 'love', 'dyk', 'love', 'dyk']

(3)索引(偏移)[] , 切片[ : ],[ : : ]

li=["C","i","t","y","City","College","Zhejiang",["City","College","Zhejiang"]]
print(len(li))
print((li[0],li[-7]))
print(li[:5])
print(li[::-1])
print(li[7][1])

结果:
8
('C', 'i')
['C', 'i', 't', 'y', 'City']
[['City', 'College', 'Zhejiang'], 'Zhejiang', 'College', 'City', 'y', 't', 'i', 'C']
College

(4)列表的常见操作

增删改查

1.增

  • append()

    li = ["City", "College"]
    print(id(li))
    li1 = ["a", "b", "c"]
    li.append(li1)
    print((li, id(li)))
    li=["a","b"]
    print(id(li))
    
    结果:
    57044584
    (['City', 'College', ['a', 'b', 'c']], 57044584)
    56889832
  • extend()

    li = ["City", "College"]
    li1 = ["a", "b", "c"]
    li.extend(li1)
    print(li)
    
    结果:
    ['City', 'College', 'a', 'b', 'c']
  • insert(),按照索引添加

li = ["City", "College"]
li1 = ["a", "b", "c"]
li.insert(1,li1)
print(li)

结果:
['City', ['a', 'b', 'c'], 'College']

2.改

li=["C","i","t","y","City","College","Zhejiang"]
li[1]="6666"
li[2:6]=["x","y","z"]
print(li)

结果:
['C', '6666', 'x', 'y', 'z', 'Zhejiang']

3.删

  • pop()

    • 如果不指定索引,默认删除最后一个元素

    • 删除指定索引对应的元素

      li=["a","b","c","d","e"]
      print(li.pop(2))
      print(li)
      
      结果:
      c
      ['a', 'b', 'd', 'e']
  • remove(),移除第一次遇到的指定元素

    li=["a","b","c","d","e","city","e"]
    print(li.remove("e"))
    print(li)
    
    结果:
    None
    ['a', 'b', 'c', 'd', 'city', 'e']
  • del

    li=["a","b","c","d","e","city","e"]
    del li[5]
    print(li)
    
    结果:
    ['a', 'b', 'c', 'd', 'e', 'e']
  • clear()

li.clear()
print(li)

4.查

  • 索引,切片

遍历

(1)元素遍历

li=["a","b","c"]
for i in li:
    print(i)
    
结果:
a
b
c

(2)索引遍历

li=["a","b","c"]
for i in range(len(li)):
    print(li[i])
    
结果:
a
b
c

(3)枚举遍历

enumerate(),对于一个可迭代的/可遍历的对象(如列表,字符串等),enumerate()将其组成一个索引序列,利用它,我们可以同时获得索引和值。

li = ["a", "b", "c"]
for i in enumerate(li,2):
    print(i)

li = ["a", "b", "c"]
for index,value in enumerate(li,2):
    print(index,value)
    
li = ["a", "b", "c"]
for index,value in enumerate(li[:2],2):
    print(index,value)
结果:
(2, 'a')
(3, 'b')
(4, 'c')

2 a
3 b
4 c

2 a
3 b

堆和栈,用列表实现

  • 计数,count(),查找元素出现的次数

  • 反转,reverse()

    li=list("abcd")
    print(li)
    li.reverse()
    print(li)
    
    li=[["a","b","c"],["d","e"]]
    print(li)
    li.reverse()
    print(li)
    
    结果:
    ['a', 'b', 'c', 'd']
    ['d', 'c', 'b', 'a']
    
    [['a', 'b', 'c'], ['d', 'e']]
    [['d', 'e'], ['a', 'b', 'c']]
  • 排序,sort()

    #按照ASCII码排序

    li=list("abcd")
    li.sort()
    print(li)
    li.sort(reverse=True)
    print(li)
    
    结果:
    ['a', 'b', 'c', 'd']
    ['d', 'c', 'b', 'a']

input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。

li = []
while True:
    inp = input("请输入元素: \t")
    if inp == "q":
        break
    else:
        li.append(inp)
print(li)

随机生成30个0-10的随机整数,并统计每个数的出现的次数,返回的结果形式为[[0,3],[1,4],…,[10,5]]

import random
list1 = []
list2 = []
for i in range(30):
    list1.append(random.randint(0, 10))
print(list1)

for i in range(11):
    list2.append([i, list1.count(i)])
print(list2)

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

赋值与深浅拷贝

赋值#赋值是对对象的引用

la=[1,2,3,4,5,'a',['b1','b2']]
lb=la
print(la)
print(lb)
print(id(la),id(lb))
print(la is lb)

la[5]="aaa"
print(la)
print(lb)

结果:
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
52194760 52194760
True
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]

深浅拷贝#浅拷贝会创建新对象,内容是原对象的引用

三种实现方法:

  • 切片操作[ : ]

    la=[1,2,3,4,5,'a',['b1','b2']]
    lb=la
    lb2=la[:]
    print(id(la),id(lb),id(lb2))
    
    结果:
    58748200 58748200 58593648
  • 工厂函数list(li)

  • copy模块内的copy函数。

    浅拷贝#浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化。

    import copy
    la=[1,2,3,4,5,'a',['b1','b2']]
    lb_copy=copy.copy(la)
    print(id(la),id(lb_copy))
    
    la.append('test')#添加原子类型,不会影响lb_copy
    print(la)
    print(lb_copy)
    
    import copy
    la=[1,2,3,4,5,'a',['b1','b2']]
    lb_copy=copy.copy(la)
    la[6][0]="bbb"
    print(la)
    print(lb_copy)
    结果:
    47447416 47539744
    
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    
    [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
    [1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]

    深拷贝#深拷贝是指将原列表完全克隆一份新的

    import copy
    la=[1,2,3,4,5,'a',['b1','b2']]
    lb_deepcopy=copy.deepcopy(la)
    print(la,id(la))
    print(lb_deepcopy,id(lb_deepcopy))
    
    la[6][1]="aaa"
    print(la)
    print(lb_deepcopy)
    
    结果:
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 47644224
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 47736512
    [1, 2, 3, 4, 5, 'a', ['b1', 'aaa']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

对象的引用

浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。

深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存储存区,和数据源没有关系了。

列表解析式

li=[]
for x in range(10):
    li.append(x)
print(li)

print([x for x in range(10) if x%2==0])

结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]

列表生成式,用来生成列表的特定的语法形式

sr="城市学院"
print([ord(x) for x in sr])

结果:
[22478, 24066, 23398, 38498]

格式:

[表达式 for 迭代元素 in 可迭代对象]
[exp for iter_val in iter]

实现原理:

  • 迭代iter中的每一个元素。
  • 每迭代一次的结果赋值给iter_val素,再通过exp运算得到一个新的值。
  • 最后所有通过表达式计算的值以一个列表的形式返回。

三目运算符

y=12
x=y+1 if y>10 else y-1
print(x)

带过滤功能格式

[exp for iter_val in iter if if_condition]
li=[]
for iter_val in iter:
    if if_condition:
        li.append(iter_val)
print(li)
name=["dyk","yhh"]
subject=["Python","Java","C","C++"]
li=[]
for i in name:
    for j in subject:
        li.append([i,j])
print(li)

print([[i,j] for i in name for j in subject])

结果:
[['dyk', 'Python'], ['dyk', 'Java'], ['dyk', 'C'], ['dyk', 'C++'], ['yhh', 'Python'], ['yhh', 'Java'], ['yhh', 'C'], ['yhh', 'C++']]
[['dyk', 'Python'], ['dyk', 'Java'], ['dyk', 'C'], ['dyk', 'C++'], ['yhh', 'Python'], ['yhh', 'Java'], ['yhh', 'C'], ['yhh', 'C++']]

元组

  • 有序
  • 可以重复的
  • 不可更改

符号使用()

定义:

元组的创建

  • 空元组的创建,不能添加元素

  • 单元素元组的创建,需要在单元素后面添加逗号

  • 多元素元组的创建,包含多种数据类型

(1)拼接

(2)重复

(3)索引(偏移) 切片

  • 索引查

  • 切片查

  • index()

tp=(1,2,3,"a","b",["aa","bb","cc"])
print(tp.index("a"))#只能查看第一层
print(tp[5].index("aa"))

结果:3   0

增,不能

删,删除某个元素,不能;但可以全部删了

del tp
print(tp)

最大值、最小值

print(max(tp),min(tp))

遍历

  • 元素遍历
  • 索引遍历
  • 枚举enymerate
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值