作为一个刚开始学习Python 的大龄菜鸟,从零开始记录自己的学习过程,希望能督促自己不断前进。
- 列表与元祖的主要区别是列表可以修改,元祖不能修改。
#列表,更改列表中某个元素
list1 = [1,5,9,4,6,'may','it']
print(list1)
list1[3]= 'it\'s love'
print(list1)
#元祖,元祖中元素不能更改
tuple1 = (1,5,9,4,6,'may','it')
print(tuple1)
tuple1[3]='it\'s love'
print(tuple1)
运行结果如下:
[1, 5, 9, 4, 6, 'may', 'it']
[1, 5, 9, "it's love", 6, 'may', 'it']
(1, 5, 9, 4, 6, 'may', 'it')
Traceback (most recent call last):
File "C:/Users/Xiao/Desktop/列表与元祖.py", line 9, in <module>
tuple1[3]='it\'s love'
TypeError: 'tuple' object does not support item assignment
##列表中还可使用append()添加元素
list1.append('not happy')
print(list1)
结果如下:
[1, 5, 9, "it's love", 6, 'may', 'it', 'not happy']
- 所有序列类型都可进行基本操作:索引、分片、加、乘,序列中所有元素都是从0开始编号的。
索引:list1[1],list1[-1] #还可以为负值,从反方向开始计数
结果:(5, 'not happy')
分片(通过冒号隔开,步长可调节,可正可负,不能为0):list1[-4::2] #默认为从-4到最后的所有元素
结果:[6, 'it']
- 在学习序列乘法时,书上有这么一段:
sentence = raw_input('Sentence: ')
screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width)//2
print()
print(' ' * left_margin + '+' + '-' * (box_width-2) + '+')
print(' ' * left_margin + '| ' + ' ' * text_width + ' |')
print(' ' * left_margin + '| ' + sentence + ' |')
print(' ' * left_margin + '| ' + ' ' * text_width + ' |')
print(' ' * left_margin + '+' + '-' * (box_width-2) + '+')
print()
得到结果:
Sentence: He is a very naughty boy!
+-----------------------------+
| |
| He is a very naughty boy! |
| |
+-----------------------------+
由此,突发奇想,觉得可以做出来一个心形,最近实在憋屈,人生从来没有这么苦闷、不自由的时候,所以想在桃心里面写上‘自由’,照猫画虎,如下:
myword = input('My word: ')
screen_width = 80
text_width = len(myword)
gap_width = len(myword)/2
inter_width = len(myword)/3
print(),print(' '*(screen_width/2-gap_width) + '*' + ' ' * (gap_width*2) + '*'),
print(' '*(screen_width/2-(gap_width*2)) + '*' + ' ' * (gap_width*2) + '*'+' '*(screen_width/2-(gap_width*2)) + '*'),
print(' '*(screen_width/2-(gap_width*2)-inter_width) + '*' + ' ' * (gap_width*4+inter_width*2) + '*'),
print(' '*(screen_width/2-(gap_width*2)) + '*' + myword + '*'),
print(' '*(screen_width/2-inter_width*2) + '*' + ' ' * (inter_width*4) + '*'),
print(' '*(screen_width/2-inter_width) + '*' + ' ' * (inter_width*2) + '*'),
print(' '*(screen_width/2) + '*')
结果报错:
Traceback (most recent call last):
File "C:/Users/Xiao/Desktop/列表与元祖.py", line 16, in <module>
print(),print(' '*(screen_width/2-gap_width) + '*' + ' ' * (gap_width*2) + '*'),
TypeError: can't multiply sequence by non-int of type 'float'
感觉是因为不是整数型,所以修改如下:
myword=input('Sentence: ')
myword
screen_width = 80
text_width = len(myword)
gap_width = int(len(myword)/2)
inter_width = int(len(myword)/3)
print(),print(' '*int(screen_width/2-gap_width) + '*' + ' ' * int(gap_width*2) + '*'),
print(' '*int(screen_width/2-(gap_width*2)) + '*' + ' ' * int(gap_width*2) + '*'+' '*int(screen_width/2-(gap_width*2)) + '*'),
print(' '*int(screen_width/2-(gap_width*2)-inter_width) + '*' + ' ' * int(gap_width*4+inter_width*2) + '*'),
print(' '*int(screen_width/2-(gap_width*2)) + '*' + myword + '*'),
print(' '*int(screen_width/2-inter_width*2) + '*' + ' ' * int(inter_width*4) + '*'),
print(' '*int(screen_width/2-inter_width) + '*' + ' ' * int(inter_width*2) + '*'),
print(' '*int(screen_width/2) + '*')
得到结果如下:
Sentence: -----Freedom!-----
* *
* * *
* *
*-----Freedom!-----*
* *
* *
*
发现第四行出现问题,并没有对齐,继续修改:
myword=input('Sentence: ')
myword
screen_width = 80
text_width = len(myword)
gap_width = int(len(myword)/2)
inter_width = int(len(myword)/3)
print(),print(' '*int(screen_width/2-gap_width) + '*' + ' ' * int(gap_width*2) + '*'),
print(' '*int(screen_width/2-(gap_width*2)) + '*' + ' ' * int(gap_width*2) + '*'+' '*int(screen_width/2-(gap_width*2)) + '*'),
print(' '*int(screen_width/2-(gap_width*2)-inter_width) + '*' + ' ' * int(gap_width*4+inter_width*2) + '*'),
print(' '*int(screen_width/2-(gap_width*2)) + '*' + ' ' * int(gap_width) + myword + ' ' * int(gap_width) + '*'),
print(' '*int(screen_width/2-inter_width*2) + '*' + ' ' * int(inter_width*4) + '*'),
print(' '*int(screen_width/2-inter_width) + '*' + ' ' * int(inter_width*2) + '*'),
print(' '*int(screen_width/2) + '*')
终于得到了一个巨丑的心形,想想自己的处境蛮讽刺的:
Sentence: -----Freedom!-----
* *
* * *
* *
* -----Freedom!----- *
* *
* *
*
- 如需检查某个值是否在列表或元祖中,可使用in:1 in list1, 1 in tuple1
结果:(True, True)
- 序列中元素的数量、最大值和最小值,可使用内置函数len(), max(), min()完成。
- list()函数可将字符串变成列表。
- 列表中元素赋值:list1[2] = 4
- 删除列表中某个元素:del list1[1]
- 列表的分片赋值:list1[-4:]=list('have'),结果:[1, 5, 9, 'h', 'a', 'v', 'e']。如果不需要替代列表中的元素,可做如下操作:list1[2:2]=[4,1,3],结果:[1, 5, 4, 1, 3, 9, 'h', 'a', 'v', 'e']。还可通过赋值来删除某些元素,list1[2:5]=[]
- 方法:方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或其它类型的对象。
list1.append(4),在列表的末尾增加新的对象;
list1.count(4),统计某个元素在列表中出现的次数;
list1.extend([5,9,8,'crystal']),在列表末尾一次性追加多个对象;
list1.index('h'),从列表中找出某个值第一个匹配项的索引位置;
list1.insert(3,'can'),将对象插入列表中;
list1.pop(),移除列表中的某个元素,默认最后一个,与append对应,分别为入栈(push)和出栈(pop);
list1.remove('5'),移除列表中某个值的第一个匹配项;
list1.reverse(),将列表中的元素反向存放;
list1.sort(),将列表中的元素按一定顺序排列,在原位置进行排序,排序后,原列表即改变,如要保留原列表,需提前赋值,再排序;或者用sorted函数,y = sorted(list1),list1不变,而y为排序后结果;sort 可选参数:key和reverse。
比较大小:cmp(55,90),结果-1;cmp(155,90),结果1;cmp(55,55),结果0。还可用于sort,list1.sort(cmp)。
- tuple()函数功能与list相似,但是结果是元组。