2016-10-01 64 views
1

我正在使用Python 3,並試圖檢測項目是否是列表中的最後一項,但有時會重複。這是我的代碼:檢測項目是否是列表中的最後一項

a = ['hello', 9, 3.14, 9] 
for item in a: 
    print(item, end='') 
    if item != a[-1]: 
     print(', ') 

而且我想這樣的輸出:

hello, 
9, 
3.14, 
9 

但我得到這樣的輸出:

hello, 
93.14, 
9 

我明白爲什麼我得到的輸出我不想。 我寧願如果我仍然可以使用循環,但我可以解決它們。 (我想用這個更復雜的代碼)

+3

不使用循環:'print(* a,sep =',\ n')' –

+0

@MartijnPieters哇,謝謝。爲什麼它不爲最後一項添加逗號? – nedla2004

+0

@ nedla2004:因爲'sep'是*分隔符*,它在元素之間。 'end'是終止符,它在最後一個元素之後。 – torek

回答

9

而不是嘗試和檢測,如果你在最後一個項目,打印下一個(只需要檢測,如果你是在你的位置,打印逗號和換行第一):

a = ['hello', 9, 3.14, 9] 
for i, item in enumerate(a): 
    if i: # print a separator if this isn't the first element 
     print(',') 
    print(item, end='') 
print() # last newline 

enumerate()功能增加了一個計數器的每個元素(見What does enumerate mean?)和if i:是除0計數器(第一元件)的所有值真。

或者使用print()插入隔板:

print(*a, sep=',\n') 

sep值被插入每個參數之間(*aa應用於所有值作爲單獨的參數,見What does ** (double star) and * (star) do for parameters?)。這比使用print(',n'.join(map(str, a)))更高效,因爲這不需要先構建一個全新的字符串對象。

+0

這正是我想要的,我只是不能接受它。 – nedla2004

+0

另外,你能否解釋一下這兩種方法。 (我完全困惑。) – nedla2004

+0

@ nedla2004:哪些部分令人困惑? ['enumerate()'做了什麼](https://stackoverflow.com/questions/22171558/what-does-enumerate-mean)?或者爲什麼'如果我:'在第一個元素的前面都是真的? –

5

如果你真的只是想加入你的元素融入到一個逗號+換行分隔的字符串,然後它更容易使用str.join方法:

elements = ['hello', 9, 3.14, 9] 
s = ',\n'.join(str(el) for el in elements) 
# And you can do whatever you want with `s` string: 
print(s) 
+0

@MartijnPieters,當然,但是'print'會打印出你的字符串,並且有可能你想稍後處理這個字符串。 – skovorodkin

+0

你也可以使用地圖! 'print(',\ n'.join(map(str,elements)))' –

0

如果你只是想看看,如果該項目是去年在(或任何列表中的任何項目),您可以嘗試使用函數來檢查項目是否在列表中最後。

a = ['hello', 9, 3.14, 9] 
def is_last(alist,choice): 
     if choice == alist[-1]: 
      print("Item is last in list!") 
      return True 
     else: 
      print("Item is not last") 
      return False 

if is_last(a,9) == True: 
    <do things> 

else: 
    <do other things> 
+0

是的,Python在列表中使用負指數從右到左數。 – AgataB

+0

'is_last(a,9)'將爲'a [1]'和'a [3]'返回兩次** True **。另外,不要在'if'語句中使用'== True',直接對'if'進行真值測試。 –

3

你沒有得到預期的輸出,因爲在你的代碼中說,「嘿蟒蛇,打印一個逗號,如果當前元素不等於最後一個元素。」

第二個元素9等於最後一個元素,因此逗號不會被打印。

檢查最後一個元素的正確方法是檢查元素的索引:(。此外,這可能會引發一個值錯誤您應該檢查這一點。)

a = ['hello', 9, 3.14, 9] 
for item in a: 
    print(item, end='') 
    if a.index(item) != len(a)-1: #<--------- Checking for last element here 
     print(', ') 

相關問題