2016-10-01 112 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(', ') 

相关问题