Python第二章:列表和元组

第二章 列表和元组

列表是可以修改的,元组是不可以修改的

序列

序列是一种数据结构。列表、字符串和元组都属于序列,其中列表是可变的,而元组和字符串是不可变的。

  • 索引
    序列中所有元素都有编号——从0开始递增
>>>greeting = 'hello'
>>>greeting[0]
'h'
#索引为负数时,将从右往左开始数
>>>greeting[-1]
'o'
# 函数调用返回一个序列,可以直接对其执行索引操作
forth = input("Year: ")[3]
print(forth)

索引操作示例:

months = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
]

# 一个列表,其中包含数1-31对应的结尾
endings = ['st', 'end', 'rd'] + 17 * ['th'] \
               + ['st', 'end', 'rd'] + 7 * ['th'] \
               + ['st']

year = input("Year : ")
month = input("Month (1-12): ")
day = input('Day (1-31): ')

month_number = int(month)
day_number = int(day)

# 别忘了将表示月和日的数减1,这样才能得到正确的索引
month_name = months[month_number - 1]
ordinal = day + endings[day_number - 1]

print(month_name + ' ' + ordinal + ', ' + year)


  • 切片
    切片来访问特定范围内的元素,使用两个索引,并用冒号分隔。

注意:其中第一个索引指定的元素包含在切片内,但第二个指定的元素不包含在切片内

string = '0123456789'
cap = string[3: 8]
cut = string[5: -4]
print(cap)
print(cut)

# 后三位
print(string[-3:])

# 头三位
print(string[: 3])

结果:

34567
5
789
012

切片操作示例:

# 从类似于http://www.something.com的URL中提取域名
url = input("Please input the URL:")
domain = url[11: -4]

print("Domain name:" + domain)

结果:

Please input the URL:http://www.baidu.com
Domain name:baidu

步长操作:第一个索引依然包含在内,第二个索引不包含在内,当部长为负数时,第一个索引必须比第二个索引要大。

number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(number[0: 10: 1])
print(number[0: 10: 2])
print(number[3: 6: 3])

print(number[::4])
print(number[8: 3: -1])

print(number[::-2])

result:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 3, 5, 7, 9]
[4]
[1, 5, 9]
[9, 8, 7, 6, 5]
[10, 8, 6, 4, 2]

  • 序列相加
    一般而言,不能拼接不同类型的序列
print([1, 2, 3] + [3, 4, 5])
print('Hello' + 'World')

result:

[1, 2, 3, 3, 4, 5]
HelloWorld

  • 序列乘法示例
sentence = input("Sentence:")

sentence_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (sentence_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()

  • 成员资格
    检查特定的值是否包含在序列中,可以使用运算符in,其返回相应的布尔值。
permission = 'rw'
print('w' in permission)
print('x' in permission)

result:

True
False

操作示例:

database =[
    ['albert', '1234'],
    ['dilbert', '4242'],
    ['smith', '7542'],
    ['jones', '9843']
]

username = input('User name: ')
pin = input('PIN code: ')

if [username, pin] in database:
    print('Access grant')

result:

User name: albert
PIN code: 1234
Access grant

长度、最小值和最大值:

number = [100, 34, 678]
print(len(number))
print(max(number))
print(min(number))

result:

3
678
34

列表

函数(实际上是一个类)list:可将序列转换为列表(不能像修改列表一样修改字符串)
列表操作:

number = [123, 43, 5778, 98, 234, 234]
print(list(number))
#修改列表:给元素赋值
number[1] = 43
print(number)
#删除元素
del number[1]
print(number)
#给切片赋值;可在不替换原有元素的情况下插入新元素,也可删除
number[2: ] = 'hello'
print(number)

number = [123, 43, 5778, 98, 234, 234]
number[1: 1] = [1, 2, 3, 4]
print(number)

number[1: 5] = []
print(number)

###列表方法:

  • append
    用于将一个对象附加到列表末尾
lst = [1, 2, 3]
list.append(lst, 4)
print(lst)
  • clear
    就地清空列表的内容
list.clear(lst)
print(lst)
  • copy
    赋值列表。常规复制只是将另一个名称关联到列表
    要让a和b指向不同的列表,就必须将b关联到a的副本
b = a
b[1] = 5
print(b)
print(a)

b = a.copy()
b[2] = 89
print(b)
print(a)
  • count
    计算指定的元素在列表中出现了多少次
list_1 = ['to', 'besda', 'tso', 'bfffsfe', 'dos', 'orss', 'not']
print(list_1.count('to'))
  • extend
    同时将多个值附加到列表末尾,可以使用一个列表来扩展另一个列表
    只是修改被扩展的序列;拼接返回一个全新的序列
a.extend(list_1)
print(a)
  • index
    在列表中查找指定值第一次出现的索引
print(list_1.index('besda'))
  • insert
    用于将一个对象插入列表
list_1.insert(2,'hello')
print(list_1)
  • pop
    从列表删除一个元素(末尾为最后一个元素),并返回这一元素
    pop是唯一一个既修改列表又返回一个非None值的列表方法
print(list_1.pop())

list_x = [1, 2, 3]
list_x.append(list_x.pop(2))
print(list_x)
  • remove
    用于删除第一个为指定值的元素
list_1.remove('besda')
print(list_1)
  • reverse
    按相反的顺序排列列表中的元素,修改列表不返回任何值
list_x.reverse()
print(list_x)
  • sort
    就地排序,sorted返回一个列表
x = [4, 6, 2, 1, 8, 10]
x.sort()
print(x)
  • 高级排序

key关键参数

list_1.sort(key=len)
print(x)

reverse设置True或False来指出是否按相反的顺序排序

x.sort(reverse=True)
print(x)

元组

元组与列表的唯一差别是元组不能修改

>>>1, 2, 3
(1, 2, 3)
#还可以用圆括号扩起
>>>(1, 2, 3)
(1, 2, 3)
#空元组用两个不包含任何内容的圆括号表示
>>>()
()
#只包含一个元素的元组后**面必须加上逗号**
>>>42,
(42,)
  • 函数tuple
    将一个序列作为参数,并将其转换为元组。如果参数已经是元组就原封不动地返回它
>>> tuple([1, 2, 3])
(1, 2, 3)

元组访问方式与其他序列相同


#一些函数

函数 描述
len(seq) 返回序列的长度
list(seq) 将序列转换为列表
max(args) 返回序列或一组参数中的最大值
min(args) 返回序列和一组参数中的最小值
reversed(seq) 让你能够反向迭代序列
sorted(seq) 返回一个有序列表,其中包含指定序列中的所有元素
tuple(seq) 将序列转换为元组

你可能感兴趣的:(python基础,Python,列表,元组)