2013-10-01 86 views
0

我一直在試圖打印恰好在列表中的函數的結果。如果這沒有意義。Python中的打印列表功能

print_long.py,定義一個Python函數print_long(list)該取字符串稱爲列表的列表,並在具有長度大於或等於6。

即原來的問題列表被打印出來的每個字符串。我試過

def print_long(list): 
    for i in print_long(list): 
     if len(list) > 6: 
      print (i) 
     else: 
      return None 

但這顯然是錯誤的,因爲它無限循環它。或者似乎似乎這樣做。 幫助。

+3

不要使用「列表」作爲變量名。它是內部使用類型的名稱 – jsvk

+1

您是否瞭解函數遞歸?爲什麼要計算列表的長度而不是列表元素的長度? – dmitri

+0

'for x in mylist:print x' –

回答

3

您的代碼似乎是一個沒有基地(終止)條件的遞歸調用。也就是說,當您第一次致電print_long()時,您立即呼叫print_long(),該呼叫無限地呼叫print_long()

你可能嘗試的代碼是一樣的東西:

def greater_than(mylist, n): 
    for item in mylist: 
     if len(item) > n: 
      print item 

mylist = ["hello", "foo", "bar", "testing", "world"] 
greater_than(mylist, 4) # Prints: hello, testing, world 

或者更簡單地說:

mylist = ["hello", . . ., "world"] # Same as above 
n = 4 
[x for x in mylist if len(x) > n] # ['hello', 'testing', 'world'] 
2

我想這是你正在嘗試做的:

def print_long(in_list): # define your function 
    for i in in_list:  # loop over the input list 
     if len(i) > 6:  # test the length of the elements 
      print (i)  # if true print it out 
     else:    # you don't need this else, as you really just want 
      pass   # to do nothing if len(i) < 6 
1

爲列表以外的其他名稱命名。 Jonathon Reinhart提出了一個很好的建議:mylist。 其他代碼示例上面還寫你的for循環更好地提供好的建議:

for i in mylist: 

您可能還需要更改LEN()爲=> 6

if len(i) >= 6 

從你寫什麼,它看起來是這樣說的,「打印出長度大於或等於6的列表中的每個字符串。」所以,你需要平等,以確保您捕捉到6

1

長度等於一個短:

def print_greater_or_equal_than(mylist, n): 
    print '\n'.join(filter(lambda i: len(i) >= n, mylist)) 
0

首先,列表是Python中的保留關鍵字,所以不要把它作爲一個參數或變量名稱。我通常使用lst。無論如何,還有其他一些問題需要解決。

def print_long(lst): 
    for i in lst: 
     if len(i) >= 6: 
      print i 

print_long(['foo','bar','hello','johnny']) 

之前,你試圖通過你的功能迭代:

for i in print_long(lst) 

這是不正確,你只是想通過列表進行迭代,如在上面第一個例子。實現你正在尋找的結果的更Python的方式是:

print ' '.join([i for i in lst if len(i) >= 6]) 

查找Python list comprehension■如果你不明白。

1

您正在對您的函數進行遞歸調用,而不是先減少列表輸入。因此,它將繼續進行無限遞歸調用。

爲了避免遞歸的無限堆棧,在列表中&打印的項目遞歸之前將其刪除:

def print_long(list): 
    i = list.pop(0) 
    if len(list) > 6: 
     print (i) 
    else: 
     return None 
    if len(list): 
     print_long(list)