python基础---序列(列表和元组)

  • 列表和元组的区别在于列表可以修改元组不能修改。
  • 几乎在所有的情况下列表都可以代替元组,一种例外的情况:使用元组作为字典的键,键不可以修改所以不能使用列表

索引(Index)

代码块

#按照输入的年月日显示日期
months = ['January',
          'February',
          'March',
          'April',
          'May',
          'June',
          'July',
          'August',
          'September',
          'October',
          'November',
          'December']

#以1~31的数字结尾做的列表
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + \
          ['st' , 'nd', 'rd'] + 7 * ['th'] + \
          ['st']

#输入要显示的年月日
years = input('Year : ')
month = input('Month (1 - 12): ')
day = input('Day (1 -31): ')

#input返回的是字符串将其转换成数字
month_numb = int(month)
day_numb = int(day)

print(months[month_numb-1] + ' ' + (day + endings[day_numb-1]) + ', ' + years)

Year : 1974
Month (1 - 12): 8
Day (1 -31): 16
August 16th,1974


分片(slicing)

提供两个索引作为边界,第一个索引的元素是包含在分片内的,而第二个则不包含在分片之内
分片中如果最左边的索引比它右边的晚出现在序列中,则结果就是一个空列表
*步长为正数时从左向右提取元素,步长为负数时从右向左提取元素
*可以利用分片来复制序列 x = [ : ]


序列乘法

代码块

#以正确的宽度在居中的“盒子”中打印一个句子

sentence = 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+2) + '|' + ' '*text_width + '|')
print(' '*(left_margin+2) + '|' + sentence + '|')
print(' '*(left_margin+2) + '|' + ' '*text_width + '|')
print(' '*left_margin + '+' + '-'*(box_width-2) + '+' )
print()

============== RESTART: /Users/apple/Desktop/python/sentence.py ==============
Sentence: learn python

                           +----------------+
                             |            |
                             |learn python|
                             |            |
                           +----------------+

成员资格

>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False

如上为成员资格 in 的用法,在UNIX系统中,这两行代码可以作为查看文件可写和可执行权限的脚本

程序举例

查看用户输入的用户名和PIN码是否存在于数据库中  如果存在就在屏幕上打印 ‘Access granted’
database = [
['albert', '1234'],
['dilbert', '4242'],
['smith', '7524'],
['jones', '9843']
]
username = input('User name: ')
pin = input('PIN code: ')
if [username, pin] in database: print ("Access granted")

列表

根据字符串创建列表:list(‘Hello’) [‘H’, ‘e’, ‘l’, ‘l’, ‘o’]
列表的元素赋值,元素删除,分片赋值距离

x=[1,1,1]
x[1] = 2
x
[1, 2, 1]
names = [‘Alice’, ‘Beth’, ‘Cecil’, ’ Dee-Dee’, ‘Earl’]
del names[2]
names
[‘Alice’, ‘Beth’, ’ Dee-Dee’, ‘Earl’]
name = list(‘Perl’)
name
[‘P’, ‘e’, ‘r’, ‘l’]
name[2:]
[‘r’, ‘l’]
name[2:] = list(‘ar’)
name
[‘P’, ‘e’, ‘a’, ‘r’]

name = list(‘Perl’)
name[1:] = list(‘ython’)
name
[‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]
numbers = [1, 5]
numbers[1:1] = [2,3,4]
numbers
[1, 2, 3, 4, 5]
numbers[1:4] = []
numbers
[1, 5]


列表方法

1、append方法—在列表末尾追加新的对象 *append方法不是简单的返回一个修改过的心列表,而是直接修改原来的列表

lst = [1,2,3]
lst.append(4)
lst
[1, 2, 3, 4]

2、count方法—统计某个元素在列表中出现的次数

x = [[1,2], 1, 1, [2, 1, [1, 2]]]
x.count(1)
2
x.count([1,2])
1

3、extend方法—-用新列表扩展原有的列表

a = [1,2,3]
b = [4,5,6]
a.extend(b)
a
[1, 2, 3, 4, 5, 6]

4、insert方法—将对象插入到列表中

numbers = [1,2,3,4,5,6,7]
numbers.insert(3,’four’)
numbers
[1, 2, 3, ‘four’, 4, 5, 6, 7]

5、pop方法—移除列表中的一个元素(默认是最后一个),并且返回该元素的值
*pop方法是唯一一个既能修改列表又返回元素的值(除了None)的列表方法

x = [1,2,3]
x.pop()
3
x
[1, 2]
x.pop(0)
1
x
[2]

pop方法类似于数据结构中的栈,最后被放入栈的最先被移除 LIFO

6、sort方法—将列表进行排序
*需要注意的地方—当用户需要一个排好序的列表副本,同时又保留原有列表不变的时候

x = [4,6,2,1,7,9]
y = x.sort() #Don’t do this
print(y)
None

因为sort方法修改了x却返回了一个空值,最后得到的x已经修改为排好序的列表,原来的列表已经丢失
正确的做法如下:

x = [4,6,2,1,7,9]
y = x[:]
y
[4, 6, 2, 1, 7, 9]
y.sort()
y
[1, 2, 4, 6, 7, 9]
x
[4, 6, 2, 1, 7, 9]

调用x[:]是一种很有效率的复制整个列表的方法,单纯的将y赋值给x是没用的,因为这样就让x和y都指向同一个列表了
另一种获取已经排序的列表副本的方法是,使用sorted方法(返回一个列表):

x
[4, 6, 2, 1, 7, 9]
y =sorted(x)
y
[1, 2, 4, 6, 7, 9]

若想让元素按照相反的顺序排列:
正确:sorted(x).reverse()
错误:x.sort().reverse()
根据元素的长度排序:

x = [‘aardvrk’, ‘abanlone’, ‘acme’, ‘add’, ‘aerate’]
x.sort(key=len)
x
[‘add’, ‘acme’, ‘aerate’, ‘aardvrk’, ‘abanlone’]

反向排序:

x = [4,6,1,7,9]
x.sort(reverse=True)
x
[9, 7, 6, 4, 1]


元组:不可变序列

*元组和字符串都是不能修改的

42
42
42,
(42,)
(42,)
(42,)

如上后两个生成长度为1的元组,但是第一个根本不是元组。(42)和42是完全一样的,但是一个逗号却能改变表达式的值

3*(40+2)
126
3*(40+2,)
(42, 42, 42)

你可能感兴趣的:(python)