Hướng dẫn how do you iterate through a list multiple times in python? - làm thế nào để bạn lặp qua một danh sách nhiều lần trong python?

Đối với dữ liệu vấn đề của chúng tôi:

x = 11 #no. of elements to get
text = 'string5' #text to search in elements of list
lst = ['string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7'] 
n = len[lst] 

# index of required text
i = lst.index[text]

Thuật toán 1: [Chu kỳ & Slice] [Cycle & Slice]

Hầu hết các cách Pythonic là sử dụng các chức năng,

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
4 và
from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
5 từ mô -đun
from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
6 OffCourse:

  • Chu kỳ thông qua / lặp lại danh sách vô hạn [hàm
    from itertools import cycle, islice 
    desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
    
    5]
  • Lát / chọn các phần tử mong muốn bằng các chỉ số bắt đầu / dừng từ danh sách lặp lại [hàm
    from itertools import cycle, islice 
    desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
    
    8]

Code:

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]

Thuật toán 2: [lập chỉ mục vòng & modulo] [Loop & Modulo Indexing]

Một cách truyền thống hơn sẽ là:

  • Vòng lặp qua danh sách
    from itertools import cycle, islice 
    desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
    
    9 không. thời gian bắt đầu sau khi chỉ số phù hợp,
    desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
    
    0
  • Chu kỳ thông qua các yếu tố danh sách bằng cách sử dụng lập chỉ mục
    desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
    
    1

Code:

desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 

Thuật toán 3 - Thực hiện xấu: [Xoay & Lặp lại] [Rotate & Repeat]

Nhiều triển khai nghèo/ chậm cũng có thể, ví dụ: Sử dụng các hàm

desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
2, như
desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
3,
desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
4:

  • Cuộn/ xoay mảng
    desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
    
    2 để khởi động nó với phần tử ở chỉ mục phù hợp,
    desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
    
    6
  • Ngói / Lặp lại mảng để tăng chiều dài của nó nhiều hơn so với
    from itertools import cycle, islice 
    desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
    
    9 không. của các yếu tố
  • Chọn
    from itertools import cycle, islice 
    desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
    
    9 không. của các yếu tố

Mã số:

def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]

Output:

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True

Timing:

Chức năng ma thuật Ipython Line

desired = [ lst[ j%n] for j in range[i+1, i+1+x]] 
9 cho thấy
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
0 không đáng ngạc nhiên
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
1 so với 2 và 3 tương ứng:

>>> %timeit list[ islice[ cycle[ lst], 5, 5+11]]
100000 loops, best of 3: 1.83 µs per loop

>>> %timeit [ lst[ j%len[lst]] for j in range[5, 5+11]] 
100000 loops, best of 3: 2.76 µs per loop

>>> %timeit nextx[lst,5,7,11]
10000 loops, best of 3: 20.6 µs per loop

Conclusion:

Sử dụng

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
6 là cách nhanh nhất và nhanh nhất để đi bất cứ khi nào bạn có thể sử dụng
from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
5,
from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
4,
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
5,
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
6, v.v.!

Vòng lặp qua nhiều danh sách

Tín dụng: Andy McKay

Vấn đề

Bạn cần phải lặp qua mọi mục của nhiều danh sách.

Dung dịch

Về cơ bản có ba cách tiếp cận. Nói bạn có:

a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']

Sử dụng chức năng tích hợp

def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7, với đối số đầu tiên là
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
8, bạn có thể lặp lại trên cả hai danh sách song song:

print "Map:"
for x, y in map[None, a, b]:
    print x, y

Các vòng lặp chạy ba lần. Trên lần lặp cuối cùng,

def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
9 sẽ là
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
8.

Sử dụng chức năng tích hợp

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
1 cũng cho phép bạn lặp lại song song:

print "Zip:"
for x, y in zip[a, b]:
    print x, y

Vòng lặp chạy hai lần; Việc lặp thứ ba chỉ đơn giản là không được thực hiện.

Danh sách hiểu biết có một lần lặp rất khác nhau:

print "List comprehension:"
for x, y in [[x,y] for x in a for y in b]:
    print x, y

Vòng lặp chạy sáu lần, trên mỗi mục của

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
2 cho mỗi mục của
>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
3.

Thảo luận

Sử dụng

def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7 với
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
8 làm đối số đầu tiên là một biến thể tinh tế của cuộc gọi
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7 tiêu chuẩn, thường có chức năng là đối số đầu tiên. Như tài liệu chỉ ra, nếu đối số đầu tiên là
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
8, hàm nhận dạng được sử dụng làm hàm mà qua đó các đối số được ánh xạ. Nếu có nhiều đối số danh sách,
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7 trả về một danh sách bao gồm các bộ dữ liệu có chứa các mục tương ứng từ tất cả các danh sách [nói cách khác, thì đó là một loại hoạt động chuyển vị]. Các đối số danh sách có thể là bất kỳ loại trình tự nào và kết quả luôn là một danh sách.

Lưu ý rằng kỹ thuật đầu tiên trả về

def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
8 cho các chuỗi trong đó không có thêm các yếu tố. Do đó, đầu ra của vòng lặp đầu tiên là:

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
0

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
1 cho phép bạn lặp lại các danh sách theo cách tương tự, nhưng chỉ có số lượng các yếu tố của danh sách nhỏ nhất. Do đó, đầu ra của kỹ thuật thứ hai là:

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
1

Python 2.0 đã giới thiệu các toàn bộ danh sách, với một cú pháp mà một số tìm thấy một chút lạ:

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
2

Điều này lặp lại trong danh sách

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
2 cho mọi yếu tố trong
>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
3. Các yếu tố này được đưa vào một tuple
>>> %timeit list[ islice[ cycle[ lst], 5, 5+11]]
100000 loops, best of 3: 1.83 µs per loop

>>> %timeit [ lst[ j%len[lst]] for j in range[5, 5+11]] 
100000 loops, best of 3: 2.76 µs per loop

>>> %timeit nextx[lst,5,7,11]
10000 loops, best of 3: 20.6 µs per loop
3
>>> %timeit list[ islice[ cycle[ lst], 5, 5+11]]
100000 loops, best of 3: 1.83 µs per loop

>>> %timeit [ lst[ j%len[lst]] for j in range[5, 5+11]] 
100000 loops, best of 3: 2.76 µs per loop

>>> %timeit nextx[lst,5,7,11]
10000 loops, best of 3: 20.6 µs per loop
4. Sau đó, chúng tôi lặp lại thông qua danh sách kết quả của các bộ dữ liệu trong vòng lặp
>>> %timeit list[ islice[ cycle[ lst], 5, 5+11]]
100000 loops, best of 3: 1.83 µs per loop

>>> %timeit [ lst[ j%len[lst]] for j in range[5, 5+11]] 
100000 loops, best of 3: 2.76 µs per loop

>>> %timeit nextx[lst,5,7,11]
10000 loops, best of 3: 20.6 µs per loop
5 ngoài cùng. Do đó, đầu ra của kỹ thuật thứ ba khá khác nhau:

from itertools import cycle, islice 
desired = list[ islice[ cycle[ lst], i+1, i+1+x]]
3

Xem thêm

Phần tham chiếu thư viện về các loại trình tự; Tài liệu cho các tích hợp

>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
1 và
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7 trong tài liệu tham khảo thư viện.Library Reference section on sequence types; documentation for the
>>> nextx[lst,5,7,11]
['string6', 'string7', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string1', 'string2']
>>> nextx[lst,5,7,11] == [lst[j%len[lst]] for j in range[5,5+11]] == list[islice[cycle[lst],5,5+11]]
True
1 and
def nextx[lst,i,n,x]:
    ll = np.array[lst]
    rll = np.roll[ll, n-i]
    trll = np.tile[rll, x%n+1]
    return list[trll[:x]]
7 built-ins in the Library Reference.

Làm thế nào để bạn lặp lại nhiều lần trong Python?

Chúng ta có thể hoàn thành nhiệm vụ này bằng một trong các tùy chọn sau:..
Phương pháp 1: Sử dụng in [] và toán tử số học ..
Phương pháp 2: Sử dụng một vòng lặp và phạm vi [].
Phương pháp 3: Sử dụng hàm đầu vào [] ..
Phương pháp 4: Sử dụng itertools. nói lại[].
Phương pháp 5: Sử dụng DataFrame của Pandas ..

Làm thế nào để bạn giữ một vòng lặp danh sách trong Python?

Bạn có thể lặp qua các mục danh sách bằng cách sử dụng vòng lặp thời gian.Sử dụng hàm Len [] để xác định độ dài của danh sách, sau đó bắt đầu ở 0 và lặp theo cách của bạn thông qua các mục danh sách bằng cách tham khảo các chỉ mục của chúng.Hãy nhớ tăng chỉ số lên 1 sau mỗi lần lặp.using a while loop. Use the len[] function to determine the length of the list, then start at 0 and loop your way through the list items by referring to their indexes. Remember to increase the index by 1 after each iteration.

Bạn có thể lặp qua nhiều danh sách trong Python không?

Sử dụng phương thức Zip_Longest [] của mô -đun itertools, bạn có thể lặp lại thông qua hai danh sách song song cùng một lúc.Phương pháp cho phép vòng lặp chạy cho đến khi danh sách dài nhất dừng lại.. The method lets the loop run until the longest list stops.

Danh sách vòng lặp trong Python là gì?

Một vòng lặp là một chuỗi các hướng dẫn liên tục được lặp lại cho đến khi đạt được một điều kiện nhất định.Chẳng hạn, chúng tôi có một bộ sưu tập các mục và chúng tôi tạo ra một vòng lặp để trải qua tất cả các yếu tố của bộ sưu tập.Trong Python, chúng ta có thể lặp qua các yếu tố danh sách với và trong khi các câu lệnh và liệt kê toàn bộ.a sequence of instructions that is continually repeated until a certain condition is reached. For instance, we have a collection of items and we create a loop to go through all elements of the collection. In Python, we can loop over list elements with for and while statements, and list comprehensions.

Bài Viết Liên Quan

Chủ Đề