检测项目是否是列表中的最后一项
我正在使用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
我明白为什么我得到的输出我不想。 我宁愿如果我仍然可以使用循环,但我可以解决它们。 (我想用这个更复杂的代码)
而不是尝试和检测,如果你在最后一个项目,打印下一个(只需要检测,如果你是在你的位置,打印逗号和换行第一):
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
值被插入每个参数之间(*a
在a
应用于所有值作为单独的参数,见What does ** (double star) and * (star) do for parameters?)。这比使用print(',n'.join(map(str, a)))
更高效,因为这不需要先构建一个全新的字符串对象。
如果你真的只是想加入你的元素融入到一个逗号+换行分隔的字符串,然后它更容易使用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)
@MartijnPieters,当然,但是'print'会打印出你的字符串,并且有可能你想稍后处理这个字符串。 – skovorodkin
你也可以使用地图! 'print(',\ n'.join(map(str,elements)))' –
如果你只是想看看,如果该项目是去年在(或任何列表中的任何项目),您可以尝试使用函数来检查项目是否在列表中最后。
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>
是的,Python在列表中使用负指数从右到左数。 – AgataB
'is_last(a,9)'将为'a [1]'和'a [3]'返回两次** True **。另外,不要在'if'语句中使用'== True',直接对'if'进行真值测试。 –
你没有得到预期的输出,因为在你的代码中说,“嘿蟒蛇,打印一个逗号,如果当前元素不等于最后一个元素。”
第二个元素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(', ')
不使用循环:'print(* a,sep =',\ n')' –
@MartijnPieters哇,谢谢。为什么它不为最后一项添加逗号? – nedla2004
@ nedla2004:因为'sep'是*分隔符*,它在元素之间。 'end'是终止符,它在最后一个元素之后。 – torek