2010-11-25 17 views
13

Geri dönüş nesnesi, list.reverse() için None olarak adlandırılmıştır. Yani solution(k)'u aradığımda bu kod başarısız oluyor. Geçici hale getirmenin bir yolu var mı? Ya da nasıl yapmalıyım?list.reverse liste geri dönmüyor mu?

fCamel = 'F' 
bCamel = 'B' 
gap = ' ' 

k = ['F', ' ', 'B', 'F'] 

def solution(formation): 
    return ((formation.index(bCamel) > (len(formation) - 1 - (formation.reverse()).index(fCamel)))) 

p.s. Bu benim pythondaki ilk kodum. Fonksiyonel olduğunu düşündüm.

+0

? Belki de ne yapmaya çalıştığınızı açıklarsanız, daha iyi bir “pythonic” çözüm üretmenize yardımcı olabiliriz. – GWW

+0

Bu deve bulmacasını python'da çözmeye çalışıyorum, böylece dili biraz öğrenebiliyorum. Temel olarak, eğer tüm 'F'ler ilk' B 'nin sol tarafındaysa, bu işlev doğrudur. – nakiya

+0

Sadece merak ediyorum. Daha fazla soruya cevapsız kalıyorum. Bu basit bir soru, bana göre ilginç bir soru gibi görünüyor. Neden insanlar sorular için biraz daha oy vermiyor? Sıklıkla cevaplar için yüksek miktarlarda oylar görüyorum. Bu, sorunun en azından ilginç çözümler veya tartışmalar getirme potansiyeline sahip olduğu, ancak soruların kendisi için bir oy kullanmadığı anlamına geliyor. Bana garip görünüyor (O_O) Şerefe! – Morlock

cevap

18

formation'un bir ters yineleyicisini döndürmek için reversed(formation)'u kullanabilirsiniz. formation.reverse()'u aradığınızda listenin tersine çevrilir ve Hiçbiri döndürmez.

DÜZENLEME:

Ben şimdi yapmaya çalıştıkları görmek

, bence bu sadece bir liste anlayışı ile bunu yapmak kolay: Bu temelde tüm sonra unsurları bakar

def solution(formation): 
    return len([k for k in formation[formation.index(bCamel)+1:] if k == fCamel]) == 0 

İlk bCamel ve fCamel değerine sahip tüm öğeleri toplar. Bu listede bir uzunluk varsa == 0 bir çözümünüz var.

Aşağıda birkaç örnek verilmiştir:

>>> k = ['F','F','B','B','F'] 
>>> solution(k) 
False 
>>> k = ['F','F','B','B','B'] 
>>> solution(k) 
True 
>>> k = ['F','F','B','F','F','B','B'] 
>>> solution(k) 
False 
>>> 
+3

Bu, OP'nin değiştirilmemiş kodunda çalışmayacaktır, çünkü "tersine çevrilmiş" bir liste döndürmez, ancak bir yineleyici ("dizin" yöntemine sahip değildir). – rbp

+0

Evet, bunu hatırladım ve yorumumu ayarladım. Onun istediği gibi çalışmasını sağlamak için kesinlikle kodunu değiştirmesi gerekecekti. – GWW

+0

Bunu anlıyorum. Ancak tersine çevrilmiş nesneyi (bu? Python'da ne diyorsunuz?) Geri döndüyse çok daha anlamlı olur mu? Bunu yapan başka bir işlev var mı? Aksi takdirde başka bir çift satırım daha olurdu :( – nakiya

4

list.reverse INPLACE tersine çevirir. Yani:

>>> l = [1, 2, 3] 
>>> l.reverse() 
>>> l 
[3, 2, 1] 

Python documentation başvurun, bunlar gibi şeyler vardır düzenlenmiştir.

yardımı (l.reverse) yerleşik fonksiyon ters Yardım:: Ayrıca 'yardım' yerleşik deneyebilirsiniz (

ters ...) L. (- ters - YERİNDE

5

GWW'nin yanıtını oluşturmak için, bu kodun çalışmasını istiyorsanız, sadece list(reversed(formation)) numaralı telefonu kullanabilirsiniz. Gerçekten yerine formation.reverse() kullanabilmek için isterseniz, size list alt sınıf olurdu:

>>> class ReversableList(list): 
...  def reverse(self): 
...   return list(reversed(self)) 
... 
>>> x = ReversableList([1,2,3]) 
>>> x.reverse() 
[3, 2, 1] 

bu tavsiye edilir olup olmadığı elbette başka sorudur.

0

Süper güzel değil, ama eşdeğer cevaplarda eşdeğerini bulamadım. Hız veya hafıza maliyetleri düşükse (liste çok uzun değilse veya işlem çok fazla tekrarlanmıyorsa), bu oldukça basittir ve daha kolay okunur.

import copy 

fCamel = 'F' 
bCamel = 'B' 
gap = ' ' 

k = ['F', ' ', 'B', 'F'] 

def solution(formation): 
    rev_formation = copy.copy(formation) 
    rev_formation.reverse() 
    return ((formation.index(bCamel) > (len(formation) - 1 - 
      (rev_formation).index(fCamel)))) 

Alkış

14
Sen ters listesini döndürmek için dilimleme kullanabilirsiniz

: Sadece bu sorun üzerinde geldi ve bir javascript gelen python için yeni kullanıcılar için bazı şeyleri netleştirmek istedim

l[::-1] 
+0

, son noktaya koyduğunda harika olurdu "l = [...]/print (l)/print (l [:: - 1]" –

+2

Bu gerçek cevaptır Bu soruya, liste içi anlatımların içine girebilmeniz için yerinde bir liste döndürür. –

1

arka fon.

Javascript'te, a.reverse() yeri tersine çevirir ve ayrıca çağrıldığında diziyi döndürür.

JavaScript:

python'da
var a = [2, 3 ,4] 
console.log(a.reverse()) 
// outputs [4, 3, 2] 

, a.reverse() yerine tersine çevirir, ancak diziyi döndürmez. Bu benim için karışıklığa neden olan şey. python'da

:

Aradığınız unsurlar listesinde olmayan ne olur
a = [2, 3, 4] 
a.reverse() 
print(a) 
# outputs [4, 3, 2] 
# can't do print(a.reverse()) 
İlgili konular