# Python notes (XV): List derivation

2022-01-30 15:41:23

Little knowledge , Great challenge ！ This article is participating in “ A programmer must have a little knowledge ” Creative activities .

Hello everyone , I am a A bowl week , One doesn't want to be drunk ( Internal volume ) The front end of the . If you are lucky enough to get your favor , I'm very lucky ~

## List generator

List generation is List Comprehensions, yes Python Built in very simple but powerful can be used to create list Generative form of .

The syntax is as follows ：

``````#  Ordinary generative
[ expression  for  Variable  in  Old list ]
#  Conditional generating formula
[ expression  for  Variable  in  Old list  if  Conditions ]
# if...else Conditional generating formula
[ expression  if  Conditions 1 else  Conditions 2for  Variable  in  Old list ]
Copy code ``````

### Case study

1. Not enough letters to filter out nouns 4 Name , The sample code is as follows ：
``````names = ["Tom", "Lily", "Jack", "Steven", "Bod"]
#  In the process of not using list generation
news_names = []
for name in names:
if len(name) > 3:
news_names.append(name)
print(news_names)  # ['Lily', 'Jack', 'Steven']
#  Use list generation
new_names = [name for name in names if len(name) > 3]
print(new_names)  # ['Lily', 'Jack', 'Steven']
Copy code ``````

Obvious , Using list generation can save a lot of lines of code

1. take 1-100 Integers can be 3 and 5 Divisible numbers , Make a new list . Sample code , The sample code is as follows ：
``````#  take 1-100 Integers can be 3 and 5 Divisible numbers , Make a new list
#  The old way
number_list = []
for i in range(101):
if i % 3 == 0 and i % 5 == 0:
number_list.append(i)
print(number_list)  # [0, 15, 30, 45, 60, 75, 90]

#  List generator
new_num_list = [i for i in range(101) if i % 3 == 0 and i % 5 == 0]
print(new_num_list)  # [0, 15, 30, 45, 60, 75, 90]
Copy code ``````
1. take 0 To 10 Odd sum of 0 To 5 Even numbers of form a non repeating list , The sample code is as follows ：
``````#  take 0 To 10 Odd sum of 0 To 5 Even numbers of form a non repeating list
#  The old way
news_number_list = []
for x in range(10):
if x % 2 != 0:
for y in range(5):
if y % 2 == 0:
news_number_list.append([x, y])
print(news_number_list)
# [[1, 0], [1, 2], [1, 4], [3, 0], [3, 2], [3, 4], [5, 0], [5, 2], [5, 4], [7, 0], [7, 2], [7, 4], [9, 0], [9, 2],[9, 4]]

#  The new method
news_num_list = [[x, y]
for x in range(10) if x % 2 != 0 for y in range(6) if y % 2 == 0]
print(news_num_list)
# [[1, 0], [1, 2], [1, 4], [3, 0], [3, 2], [3, 4], [5, 0], [5, 2], [5, 4], [7, 0], [7, 2], [7, 4], [9, 0], [9, 2],[9, 4]]
Copy code ``````

It also supports multiple for sentence , If you use the original method, the hierarchy is too deep , Use generative one line to solve

1. Make the number in the list greater than 8000 Plus 200 Less than or equal to 8000 Plus 500, The sample code is as follows ：
``````#  Make the number in the list greater than 8000 Plus 200  Less than or equal to 8000 Plus 500
number = [5000, 10000, 4500, 80000, 12000]

#  The old way
for i in number:
if i > 8000:
i += 200
else:
i += 500
print(number)  # [5000, 10000, 4500, 80000, 12000]

#  The new method
new_number = [i + 200 if i > 8000 else i + 500 for i in number]
print(new_number)  # [5000, 10000, 4500, 80000, 12000]
Copy code ``````

## Set generative

The grammatical structure is as follows ：

``````#  Ordinary generative
{ expression  for  Variable  in  Old list }
#  Conditional generating formula
{ expression  for  Variable  in  Old list  if  Conditions }
# if...else Conditional generating formula
{ expression  if  Conditions 1 else  Conditions 2for  Variable  in  Old list }
Copy code ``````

The syntax structure is basically the same as that of list generation , But because the set does not allow duplicates , All the results are automatically de duplicated

## Dictionary generative

The syntax structure of dictionary generation is consistent with that of set generation and list generation , The only difference is that dictionaries store information in the form of key value pairs , In the following example, we will dict Key value exchange in , The sample code is as follows ：

``````#  Exchange the key value pairs of the dictionary
dict1 = {"a": "A", "b": "B", "c": "C"}
#  Just the way
new_dict1 = {}
for key, value in dict1.items():  #  Returns a tuple containing key value pairs
new_dict1[value] = key
print(new_dict1)  # {'A': 'a', 'B': 'b', 'C': 'c'}

#  The new method
news_dict1 = {value: key for key, value in dict1.items()}
print(news_dict1)  # {'A': 'a', 'B': 'b', 'C': 'c'}
Copy code ``````

`item` Method ： Return traversable ( key , value ) Tuple array .