current position:Home>Python notes (XV): List derivation

Python notes (XV): List derivation

2022-01-30 15:41:23 A bowl week

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 .

copyright notice
author[A bowl week],Please bring the original link to reprint, thank you.
https://en.pythonmana.com/2022/01/202201301541203537.html

Random recommended