Python列表序列及字典的操作

本文介绍了Python中嵌套列表推导式的使用方法,并展示了如何进行矩阵转置操作。此外,还探讨了元组、集合及字典的高级用法,包括集合运算、字典构造及序列遍历技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-size:14px;"># -*- coding: utf-8 -*-
#嵌套列表推导式
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    ]
print [[row[i] for row in matrix] for i in range(4)]
#等价于
transposed = []
for i in range(4):
    transposed.append([row[i] for row in matrix])
print transposed

#等价于
transposed2 = []
for j in range(4):
    transposed_row = []
    for row in matrix:
        transposed_row.append(row[j])
    transposed2.append(transposed_row)

print transposed2

#等价于
print zip(*matrix)
#实现行列转换
#结果:[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
print('-')*40

#元组和序列
t = 12345, 54321, 'hello!'
print t[0]
#结果:12345

u = t, (1, 2, 3, 4, 5)
print u
#结果:((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
x,y,z = t
print x,y,z
#结果:12345 54321 hello!
print('-')*40

#Set集合
'''
    Set 是一个不包含重复元素的无序集合
    花括号或set()方法都可以用来创建集合。注意如果你想要创建一个空集合,必须要用set()
而不能用{}。后者创建了一个空字典
'''
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print (basket)
#结果:set(['orange', 'pear', 'banana', 'apple']) 去除了重复元素

print 'orange' in basket
#结果:True

a = set('abracadabra')
print a
#结果:set(['a', 'r', 'b', 'c', 'd'])
b = set('alacazam')
print b
#结果:set(['a', 'c', 'z', 'm', 'l'])
print a - b
#结果:set(['r', 'b', 'd']) 在a 中但不在b 中
print a | b
#结果:set(['a', 'c', 'b', 'd', 'm', 'l', 'r', 'z']) 在a 或b 中
print a & b
#结果:set(['a', 'c']) 在a 且在b 中
print a ^ b
#结果:set(['b', 'd', 'm', 'l', 'r', 'z']) 在a 或在b 中,但不同时在两者中

print {x for x in 'abracadabra' if x not in 'abc'}
#结果:set(['r', 'd'])
print('-')*40

#字典
'''
    不像序列能用数字可以索引,在字典中是任何一种不变类型的关键字keys
来查询。字符串和数字是常见的关键字。如果元组中仅仅包含字符串,数组或者重数,那
么元组也可以充当关键字。但是如果元组中直接或者间接包含可变的对象,那么元组就不能
做关键字。
    你不能把列表用作关键字,因为列表在索引赋值,切片赋值以及方法append()和extend()
运用时可以改变本身值。
    键字是无序的,如果你想要对关键字进行排序,可以用方法sorted(d.keys()).可以用in 关
键字来检查单个关键字是否在字典中。
'''
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127
print tel
#结果:{'sape': 4139, 'jack': 4098, 'guido': 4127}

del tel['sape']
tel['irv'] = 4127
print tel
#结果:{'jack': 4098, 'irv': 4127, 'guido': 4127}

print list(tel.keys())
#结果:['jack', 'irv', 'guido']

print 'guido' in tel
#结果:True

#用dict函数构造一个字典
print dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
#结果:{'sape': 4139, 'jack': 4098, 'guido': 4127}

#字典利用复合表达式从随机的key 和value 的表达式中来创建字典。
print {x: x**2 for x in (2, 4, 6)}
#结果:{2: 4, 4: 16, 6: 36}

#当关键字是简单的字符串时,可以用关键字参数直接指定对象,这样有时会更加的容易。
print dict(sape=4139, guido=4127, jack=4098)
#结果:{'sape': 4139, 'jack': 4098, 'guido': 4127}
print('-')*40

#遍历
#当通过字典遍历数据时,用items()方法就可以同时把关键字和相对应的值从字典中取出。
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print k,v
#结果:gallahad the pure
#     robin the brave


#当用序列遍历数据时,用enumerate()可以同时把位置索引和对应的值得到。
for i, v in enumerate(['tic', 'tac', 'toe']):
    print i, v
'''
    结果:0 tic
         1 tac
         2 toe
'''
#想要同时遍历两个或多个序列时,可以用方法zip()把属性整合起来。
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('What is your {0}? It is {1}.'.format(q, a))
'''
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
'''
#想要倒叙遍历序列,首先正序指定遍历序列,然后调用方法reversed().
for i in reversed(range(1, 10, 2)):
    print i,
#结果:9 7 5 3 1

#想要有序的遍历列表,用方法sorted()可以返回一个新的有序列表而不改变原先列表。
basket2 = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for f in sorted(set(basket)):
    print f,
#apple banana orange pear

string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
print string1 or string2
#结果:Trondheim
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值