除了常见的列表创建方法外,还有一下几种创建方式:
'''split()函数用来分割文本,可以给定分割符号,如上以 , 为分割符'''
suits = 'Spade,Heart,Club,Diamond'.split(',')
'''用for..in ..语句块可以使得列表的创建更加简洁,尤其是需要添加大量元素。
list(seq)函数用来创建,不过只能传入一个参数.'''
ranks = [str(x) for x in range(2,11)] + list('JQKA')
'''笛卡尔积的应用,下面创建Card列表运用了笛卡尔积,好处就是我们在创建一个
二元列表时不需要像其他语言一样需要两个for语句来嵌套,这样更加简洁。而且
python对笛卡尔积进行了优化,效率比两个for循环嵌套更快。'''
Card = [(suit,rank) for suit in suits for rank in ranks[:2]]
#可以在下面结果图中看到这些操作会产生什么结果
'''*号在不同的位置会产生不同的效果'''
test = ['_']*3
test1 = [['_']*3]
'''不推荐以下方法来创建,效果如图所示,这样做的后果就是在第一维中,每个元素
都是指向同一地址,改变其中一个也就改变了其他元素了'''
test2 = [['_']*3]*3
test2[1][2] = 'O'
'''推荐使用这种方法来创建'''
test3 = [['_']*3 for i in range(3)]
test3[1][2] = 'O'
'''不推荐这种方法创建,原因同test2
test4 = []
test5 = ['_']*3
for i in range(3):
test4.append(test5)
test4[1][2] = 'O'
2017.10.29补充
我们用列表生成一个二维数组:
list1 = [[range(5)] for i in range(5)]
结果
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
拆包可以运用到列表,元组中,实现快速拆分其元素的效果
'''*号表示将拆分后多余元素的放在一个列表里面'''
l = [10,11,12]
a,b,c = l
c , *d = l
*e , f = l
print(a,b,c)
print(c,d)
print(e,f)
'''l如果是一个列表或者元组时,*l表示将每个元素都拆包出来'''
print(*l)
suits = 'Spade,Heart,Club,Diamond'.split(',')
ranks = [str(x) for x in range(2,11)] + list('JQKA')
Card = [(suit,rank) for suit in suits for rank in ranks[:1]]
print(Card)
for tmp in Card:
print(*tmp)
'''#效果和上面一样
for tmp in Card:
print('%s %s'%tmp)'''
这里另外介绍python一个很方便的操作,就是两个变量在进行值交换时不用创建一个中间值变量:
a = 10
b = 20
a , b = b , a
效果图我就不贴上来了
有时我们需要枚举一个列表,元组中的元素时候,可以写成这样:
list1 = [10, 654, 56, 96]
for i, item in enumerate(list1):
print(i, item)
在python中如果使用了if-else语句我们本来是这样写的:
x, y = 100, 95
if x < y:
result = x
else:
result = y
我们可以简写为:
x, y = 100, 95
result = x if x > y else y
例如:
if x in [10, 20, 30]:
print("hello")
还可以这样子用:
def f1(a):
if a < 10:
return True
else:
return False
def f2(b):
if b < 15:
return True
else:
return False
def test(number):
if False in [f1(number), f2(number)]:
print("True")
else:
print("False")
test(9)
test(12)
test(16)