Mencetak daftar dalam urutan terbalik dengan range()?

Bagaimana anda bisa menghasilkan daftar berikut dengan range() dalam Python?

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Larutan

gunakan dibalik() fungsi:

reversed(range(10))

It's jauh lebih bermakna.

Update:

Jika anda ingin daftar (sebagai btk menunjuk keluar):

list(reversed(range(10)))

Update:

Jika anda ingin menggunakan hanya range untuk mencapai hasil yang sama, anda dapat menggunakan semua parameter. range(start, stop, langkah)

Misalnya, untuk menghasilkan daftar [5,4,3,2,1,0], anda dapat menggunakan berikut:

range(5, -1, -1)

Mungkin kurang intuitif tapi seperti komentar-komentar lagi, ini lebih efisien dan penggunaan yang tepat dari berbagai terbalik untuk daftar.

Komentar (11)

Gunakan 'range' built-in fungsi. Tanda tangan adalah range(start, stop, langkah). Hal ini menghasilkan urutan yang menghasilkan angka-angka, dimulai dengan start, dan berakhir jika stop telah tercapai, tidak termasuk berhenti.

>>> range(9,-1,-1)   
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(-2, 6, 2)
    [-2, 0, 2, 4]

Di Python 3, hal ini menghasilkan non-list range objek, yang berfungsi secara efektif suka baca-saja daftar (tapi menggunakan cara yang kurang memori, terutama untuk rentang besar).

Komentar (4)

Anda bisa menggunakan'range(10)[::-1]yang adalah hal yang sama seperti'range(9, -1, -1)dan bisa dibilang lebih mudah dibaca (jika anda're akrab dengan umum'sequence[::-1]`Python idiom).

Komentar (0)

Bagi mereka yang tertarik dalam "efisiensi" opsi yang dikumpulkan sejauh ini...

Jaime RGP's jawaban membawa saya ke restart komputer setelah waktu agak "menantang" solusi dari Jason benar-benar mengikuti saran saya sendiri (via komentar). Untuk spare penasaran anda downtime, saya hadir di sini saya hasil (terburuk pertama):

Jason's jawaban (mungkin hanya sebuah perjalanan ke kekuatan daftar pemahaman):

$ python -m timeit "[9-i for i in range(10)]"
1000000 loops, best of 3: 1.54 usec per loop

martineau's jawaban (dibaca jika anda sudah familiar dengan extended irisan sintaks):

$ python -m timeit "range(10)[::-1]"
1000000 loops, best of 3: 0.743 usec per loop

Michał Šrajer's jawaban (yang diterima, sangat mudah dibaca):

$ python -m timeit "reversed(range(10))"
1000000 loops, best of 3: 0.538 usec per loop

bene's jawaban (pertama, tapi sangat samar pada waktu itu):

$ python -m timeit "range(9,-1,-1)"
1000000 loops, best of 3: 0.401 usec per loop

Opsi terakhir adalah mudah untuk mengingat menggunakan range(n-1,-1,-1) notasi oleh Val Neekman.

Komentar (1)
for i in range(8, 0, -1)

akan memecahkan masalah ini. Ini akan menampilkan 8 1, -1 berarti terbalik daftar

Komentar (0)

Tidak masuk akal untuk menggunakan reverse karena berbagai metode dapat kembali terbalik daftar.

Bila anda memiliki iterasi n item dan ingin mengganti urutan daftar dikembalikan oleh range(start, stop, langkah) anda harus menggunakan ketiga parameter jangkauan yang mengidentifikasi langkah dan set ke -1, parameter lain yang harus disesuaikan:

  1. Memberikan stop parameter sebagai -1(it's sebelumnya nilai stop - 1, stop itu sama dengan 0).
  2. Sebagai awal parameter menggunakan n-1.

Sehingga setara dengan range(n) dalam urutan terbalik akan sama:

n = 10
print range(n-1,-1,-1) 
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Komentar (3)

Readibility samping, dibalik(range(n)) tampaknya lebih cepat dari range(n)[::-1].

$ python -m timeit "reversed(range(1000000000))"
1000000 loops, best of 3: 0.598 usec per loop
$ python -m timeit "range(1000000000)[::-1]"
1000000 loops, best of 3: 0.945 usec per loop

Hanya jika ada yang bertanya-tanya :)

Komentar (2)

Persyaratan dalam pertanyaan ini panggilan untuk daftar bilangan bulat dari ukuran 10 menurun order. Jadi, let's menghasilkan daftar di python.

# This meets the requirement.
# But it is a bit harder to wrap one's head around this. right?
>>> range(10-1, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# let's find something that is a bit more self-explanatory. Sounds good?
# ----------------------------------------------------

# This returns a list in ascending order.
# Opposite of what the requirement called for.
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# This returns an iterator in descending order.
# Doesn't meet the requirement as it is not a list.
>>> reversed(range(10))


# This returns a list in descending order and meets the requirement
>>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Komentar (1)

Sangat sering ditanya pertanyaan adalah apakah range(9, -1, -1) lebih baik dari dibalik(range(10)) di Python 3? Orang-orang yang telah bekerja dalam bahasa lain dengan iterator segera cenderung berpikir bahwa dibalik() harus cache semua nilai-nilai dan kemudian kembali dalam urutan terbalik. Masalahnya adalah bahwa Python's terbalik() operator doesn't bekerja jika objek hanya sebuah iterator. Objek harus memiliki salah satu dari berikut dua untuk terbalik() untuk bekerja:

  1. Baik berupa dukungan len() dan integer indeks melalui []
  2. Atau memiliki __dibalik__() metode yang dilaksanakan.

Jika anda mencoba untuk menggunakan dibalik() pada objek yang telah ada di atas maka anda akan mendapatkan:

>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible

Jadi singkatnya, Python's terbalik() ini hanya dimaksudkan pada array seperti benda-benda dan sehingga harus memiliki kinerja yang sama seperti iterasi ke depan.

Tetapi apa yang tentang range()? Isn't itu generator? Di Python 3 ini adalah generator tapi dibungkus dalam class yang mengimplementasikan kedua di atas. Jadi range(100000) doesn't memakan banyak memori, tetapi masih mendukung efisien pengindeksan dan membalikkan.

Jadi, dalam ringkasan, anda dapat menggunakan dibalik(range(10)) tanpa memukul pada kinerja.

Komentar (0)

Anda dapat melakukan pencetakan reverse angka dengan range() BIF Seperti ,

for number in range ( 10 , 0 , -1 ) :
    print ( number ) 

Output yang akan [10,9,8,7,6,5,4,3,2,1]

range() - kisaran ( awal , akhir , increment/decrement ) di mana mulai inklusif , end eksklusif dan kenaikan dapat berupa angka-angka dan berperilaku seperti langkah

Komentar (0)

saya percaya ini bisa membantu,

range(5)[::-1]

di bawah ini adalah Penggunaan:

for i in range(5)[::-1]:
    print i 
Komentar (0)

Menggunakan tanpa [::-1] atau terbalik -

def reverse(text):
    result = []
    for index in range(len(text)-1,-1,-1):
        c = text[index]
        result.append(c)
    return ''.join(result)

print reverse("python!")
Komentar (1)
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Komentar (4)
[9-i for i in range(10)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Komentar (0)

Misalkan anda memiliki daftar panggilan itu a={1,2,3,4,5} Sekarang jika anda ingin mencetak daftar secara terbalik maka cukup menggunakan kode berikut.

a.reverse
for i in a:
   print(i)

Aku tahu kau ditanya dengan menggunakan rentang tapi sudah dijawab.

Komentar (0)

Anda don't perlu untuk menggunakan berbagai fungsi, anda hanya dapat melakukan daftar[::-1] yang harus kembali daftar dalam urutan terbalik dengan cepat, tanpa menggunakan bahan tambahan.

Komentar (1)
range(9,-1,-1)
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Adalah bentuk yang benar. Jika anda menggunakan

reversed(range(10))

anda tidak akan mendapatkan 0 kasus. Sebagai contoh, katakanlah anda 10 isn't angka ajaib dan variabel anda're untuk menggunakan lookup mulai dari terbalik. Jika anda n case 0, terbalik(range(0)) tidak akan mengeksekusi yang salah jika anda kebetulan memiliki satu objek dalam indeks nol.

Komentar (0)