Python - 带打印功能的错误输出

时间:2017-05-16 11:10:32

标签: python printing

我是Python的新手。 我想以特定格式打印列表中的元素而不重复:{" id":value}。 这是我的代码。

d =['l','o','u','l','b','l','a']

for item in range(0,len(d)):
  prev=item-1
  if item==0:
    print("  {\"id\": \"" + (d[item]) + "\"} ,") 
    continue
  if (d[item]==d[prev])or(d[item] in d[:prev]):
    continue
  else:
    print("  {\"id\": \"" + (d[item]) + "\"}"),
    if (item==(len(d))): #if last element, print  ".", else print ","
        print(".\n"),
    else:
        print(",\n"),

结果应为:

  {"id": "l"} ,
  {"id": "o"} ,
  {"id": "u"} ,
  {"id": "b"} ,
  {"id": "a"} .

但输出是:

  {"id": "l"} ,
  {"id": "o"} ,
  {"id": "u"} ,
  {"id": "b"} ,
  {"id": "a"} ,

我的代码一直运行到最后一行。它结束于","而不是"。"。 请帮帮我

4 个答案:

答案 0 :(得分:1)

尝试if (item==len(d)-1):

最后一项有索引len(d)-1。

顺便说一下,使用set()可以更轻松地删除列表中的重复项:

list(set(['a', 'a', 'b']))将返回['a','b']

警告:如果您使用set(),则会丢失商品的订单。如果您想保留订单,请参阅How do you remove duplicates from a list in whilst preserving order?

答案 1 :(得分:0)

在python中,范围(0,N)函数返回0到N-1之间的数字。 在您的情况下,您使用了N = len(d),因此您应该相应地更改if语句。 试试:

if (item==(len(d)-1)): #if last element, print  ".", else print ","
    print(".\n")

相反。

完整运行的代码应如下所示:

d =['l','o','u','l','b','l','a']
for item_id, item in enumerate(set(d)):
  if item_id != (len(d) - 1):
    print("  {\"id\": \"" + item + "\"} ,") 
  else:
    print("  {\"id\": \"" + item + "\"} .")

答案 2 :(得分:0)

if (item==(len(d)))代码永远不会碰到这个块,因为 item只能达到len(d)-1

d =['l','o','u','l','b','l','a']

for item in range(0,len(d)):
  prev=item-1
  if item==0:
    print("  {\"id\": \"" + (d[item]) + "\"} ,") 
    continue
  if (d[item]==d[prev])or(d[item] in d[:prev]):
    continue
  else:
    print("  {\"id\": \"" + (d[item]) + "\"}"),
    if (item!=(len(d))-1): #if last element, print  ".", else print ","
        print(",\n"),
print(".\n")

使用集合:

d =['l','o','u','l','b','l','a']
d = list(set(d))
for item in range(0,len(d)):
    print("  {\"id\": \"" + (d[item]) + "\"}"),
    if (item!=(len(d))-1): #if last element, print  ".", else print ","
        print(",\n"),
print(".\n")

答案 3 :(得分:0)

由于range是独占的,range(0,len(d))的值将从0到len(d) - 1.因此,你的if语句应为 -

if item == (len(d) - 1):
    print(".\n")

如果列表中的最后一个元素是重复的,则最好创建一个集合。请尝试以下方法 -

d = {'l','o','u','l','b','l'}

for i, e in enumerate(d):
    print("  {\"id\": \"" + (e) + "\"}"),
    if i == len(d) - 1:
        print(".\n")
    else:
        print(",\n")

此处,d = {'l','o','u','l','b','l'}创建一个删除重复元素的集合。然后你可以简单地迭代它