列表与元祖的学习

作为一个刚开始学习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相似,但是结果是元组。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值