109
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Cách tốt nhất để đặt chỉ mục bắt đầu khi lặp lại một danh sách trong Python. Ví dụ, tôi có một danh sách các ngày trong tuần - Chủ nhật, Thứ Hai, Thứ Ba, ... Thứ Bảy - nhưng tôi muốn lặp lại trong danh sách bắt đầu từ Thứ Hai. Thực hành tốt nhất để làm điều này là gì?
Khi được hỏi ngày 27 tháng 5 năm 2011 lúc 6:28May 27, 2011 at 6:28
Vincent Catalanovincent CatalanoVincent Catalano
2.1994 Huy hiệu vàng21 Huy hiệu bạc29 Huy hiệu đồng4 gold badges21 silver badges29 bronze badges
3
Bạn có thể sử dụng cắt lát:
for item in some_list[2:]: # do stuffĐiều này sẽ bắt đầu ở yếu tố thứ ba và lặp lại đến cuối.
Đã trả lời ngày 27 tháng 5 năm 2011 lúc 6:31May 27, 2011 at 6:31
Bjorn Pollexbjorn PollexBjörn Pollex
73.6K28 Huy hiệu vàng192 Huy hiệu bạc277 Huy hiệu đồng28 gold badges192 silver badges277 bronze badges
8
islice có lợi thế là nó không cần phải sao chép một phần của danh sách
from itertools import islice for day in islice(days, 1, None): ...Đã trả lời ngày 27 tháng 5 năm 2011 lúc 6:49May 27, 2011 at 6:49
John La Rooyjohn La RooyJohn La Rooy
286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges
Tại sao mọi người sử dụng cắt danh sách (chậm vì nó sao chép vào danh sách mới), nhập chức năng thư viện hoặc cố gắng xoay một mảng cho việc này?
Sử dụng vòng lặp bình thường với from itertools import islice for day in islice(days, 1, None): ... 0 (trong đó from itertools import islice for day in islice(days, 1, None): ... 1 và from itertools import islice for day in islice(days, 1, None): ... 2 là các đối số tùy chọn).
Ví dụ: lặp qua một mảng bắt đầu từ INDEX 1:
for i in range(1, len(arr)): print(arr[i])Đã trả lời ngày 14 tháng 7 năm 2020 lúc 20:05Jul 14, 2020 at 20:05
1
Bạn luôn có thể lặp bằng cách sử dụng một chỉ mục để vòng lặp kiểu C thông thường:
for i in range(len(l)-1): print l[i+1]Luôn luôn tốt hơn để làm theo phong cách "vòng lặp trên mọi yếu tố" bởi vì đó là điều bình thường để làm, nhưng nếu nó cản đường bạn, chỉ cần nhớ phong cách thông thường cũng được hỗ trợ, luôn luôn được hỗ trợ.
Đã trả lời ngày 27 tháng 5 năm 2011 lúc 6:35May 27, 2011 at 6:35
LPRSDLPRSDlprsd
82.4K47 Huy hiệu vàng132 Huy hiệu bạc167 Huy hiệu đồng47 gold badges132 silver badges167 bronze badges
Stdlib sẽ móc bạn lên con trai!
from itertools import islice for day in islice(days, 1, None): ... 3:
#!/usr/local/bin/python2.7 from collections import deque a = deque('Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ')) a.rotate(3) deque(['Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday'])
Bjorn Pollex
73.6K28 Huy hiệu vàng192 Huy hiệu bạc277 Huy hiệu đồng28 gold badges192 silver badges277 bronze badges
islice có lợi thế là nó không cần phải sao chép một phần của danh sáchMay 27, 2011 at 9:16
Đã trả lời ngày 27 tháng 5 năm 2011 lúc 6:49synthesizerpatel
John La Rooyjohn La Rooy5 gold badges72 silver badges90 bronze badges
286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] for d in days[days.index('Monday'):] : print dTại sao mọi người sử dụng cắt danh sách (chậm vì nó sao chép vào danh sách mới), nhập chức năng thư viện hoặc cố gắng xoay một mảng cho việc này?May 27, 2011 at 7:17
Sử dụng vòng lặp bình thường với from itertools import islice for day in islice(days, 1, None): ... 0 (trong đó from itertools import islice for day in islice(days, 1, None): ... 1 và from itertools import islice for day in islice(days, 1, None): ... 2 là các đối số tùy chọn).juanchopanza
Ví dụ: lặp qua một mảng bắt đầu từ INDEX 1:32 gold badges391 silver badges468 bronze badges
1
Đã trả lời ngày 14 tháng 7 năm 2020 lúc 20:05
>>> def rotated_sequence(seq, start_index): ... n = len(seq) ... for i in xrange(n): ... yield seq[(i + start_index) % n] ... >>> s = 'su m tu w th f sa'.split() >>> list(rotated_sequence(s, s.index('m'))) ['m', 'tu', 'w', 'th', 'f', 'sa', 'su'] >>>Bạn luôn có thể lặp bằng cách sử dụng một chỉ mục để vòng lặp kiểu C thông thường:May 27, 2011 at 8:52
Luôn luôn tốt hơn để làm theo phong cách "vòng lặp trên mọi yếu tố" bởi vì đó là điều bình thường để làm, nhưng nếu nó cản đường bạn, chỉ cần nhớ phong cách thông thường cũng được hỗ trợ, luôn luôn được hỗ trợ.John Machin
Đã trả lời ngày 27 tháng 5 năm 2011 lúc 6:3511 gold badges138 silver badges183 bronze badges
2
LPRSDLPRSD
dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ] startDayName = 'Monday' startIndex = dayNames.index( startDayName ) print ( startIndex ) rotatedDayNames = dayNames[ startIndex: ] + dayNames [ :startIndex ] for x in rotatedDayNames: print ( x )82.4K47 Huy hiệu vàng132 Huy hiệu bạc167 Huy hiệu đồngMay 27, 2011 at 8:19
Stdlib sẽ móc bạn lên con trai!slothrop
Bjorn Pollex6 silver badges7 bronze badges
Đã trả lời ngày 27 tháng 5 năm 2011 lúc 9:16
import random arr = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] cln = len(arr) start = random.randint(0, cln-1) i = 0 while i < cln: pos = i+start print(arr[pos if pos<cln else pos-cln]) i += 1SynthesizerPatelSynthesizerPatelFeb 2 at 19:52