1
def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) ''' 设想的结果 [1] [2] [3] 打印结果 [1] [1, 2] [1, 2, 3] ''' #改成这样 def f(a, L=None): if L==None: L=[] L.append(a) return L print(f(1)) print(f(2)) print(f(3))
2 for循环的else,以及和break,continue之间的区别
其实还是break,continue本来的意思,
for n in range(2,10): for i in range(2,n): if n%i ==0: print(n, ' equals ', i ,'*',n/i) break else: print(n, ' is prime number') else: print('else in for loop 1') ''' 输出结果 2 is prime number 3 is prime number 4 equals 2 * 2.0 5 is prime number 6 equals 2 * 3.0 7 is prime number 8 equals 2 * 4.0 9 equals 3 * 3.0 else in for loop 1 ''' for n in range(2,10): if n%2==0: print(n,' is an even number') continue print(n, ' is an odd number') else: print('else in for loop 2') ''' 输出结果 2 is an even number 3 is an odd number 4 is an even number 5 is an odd number 6 is an even number 7 is an odd number 8 is an even number 9 is an odd number else in for loop 2 '''
3 切片可以越界
list=[1,2,3,4,5,6,7,8] print(list[10])#越界错误 print(list[4:10])#[5, 6, 7, 8]
List Comprehensions两个循环
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
5.6. Looping Techniques
When looping through dictionaries, the key and corresponding value can be retrieved at the same time using the items() method.
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
When looping through a sequence, the position index and corresponding value can be retrieved at the same time using the enumerate() function.
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe
To loop over two or more sequences at the same time, the entries can be paired with the zip() function.
>>> 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.
To loop over a sequence in reverse, first specify the sequence in a forward direction and then call the reversed() function.
>>> for i in reversed(range(1, 10, 2)):
... print(i)
...
9
7
5
3
1
To loop over a sequence in sorted order, use the sorted() function which returns a new sorted list while leaving the source unaltered.
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
... print(f)
...
apple
banana
orange
pear
To change a sequence you are iterating over while inside the loop (for example to duplicate certain items), it is recommended that you first make a copy. Looping over a sequence does not implicitly make a copy. The slice notation makes this especially convenient:
>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words[:]: # Loop over a slice copy of the entire list.
... if len(w) > 6:
... words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
以 list 中 tuple 的第二个值排序
list = [(1, 2, 3), (2, 1, 3), (3, 2, 1), (3, 4, 5)]
sorted_list = sorted(list, key = lambda list : list[1])
output:
sorted_list = [(2, 1, 3), (1, 2, 3), (3, 2, 1), (3, 4, 5)]