按特定顺序打印列表中的项目,python

时间:2018-01-16 18:09:05

标签: python for-loop printing

我正在尝试按特定顺序打印两个列表(l,val)中的项目。我的代码就在这里..

我尝试将(。)之后的部分循环到一个变量,但是在执行期间它会更新。

在打印中间带有a.b1 /(.)的项目时,需要像我一样在(。)处进行滑动,并且(。)之后的部分应该打印更多的空格,直到itwm的第一部分仍然存在同样,例如,在a.b1 /,a.b2 /,a.b3 /等项目的情况下,首先是' a'应该打印并且距离左边b1,b2,b3的距离相等,应该打印并且最后一次打印。应首先以相同的距离打印' a'离开了。

我的代码就在这里。

l = ['a1','b2','c3','d4','e5','a.b1/','a.b2/','a.b3/','e5','f6','g7','q.a1/','q.a2/','q.a3/','h','i','j']
val = ['None','None','None','None','None','None','None','None','None','None','None','None','None','None','None','None','None','None','None']
    for i in range(0,len(l)):
        if l[i][-1:] == '/':
            l_p = l[i].split('.')[0]
            l_c = (l[i].split('.')[1]).strip('/')
            print('       '+'%s'%l_p+' \n')
            print('         '+l_c+' '+'%s'%val[i]+' '+l_c+' '+'\n')
            print('        '+'%s'%l_p+' \n')
        else:
            print('       '+l[i]+' '+'%s'%val[i]+' '+l[i]+' '+'\n')

我的出局是

   a1 None a1 
   b2 None b2 
   c3 None c3 
   d4 None d4 
   e5 None e5 
   a 
     b1 None b1 
    a 
   a 
     b2 None b2 
    a 
   a 
     b3 None b3 
    a 
   e5 None e5 
   f6 None f6 
   g7 None g7 
   q 
     a1 None a1 
    q 
   q 
     a2 None a2 
    q 
   q 
     a3 None a3 
    q 
   h None h 
   i None i 
   j None j   

我的预期输出是:

  a1 None a1
  b2 None b2
  c3 None c3
  d4 None d4
  e5 None e5
  a
    b1 None b1
    b2 None b2
    b3 None b3
  a
  e5 None e5
  f6 None f6
  g7 None g7
  q
    a1 None a1
    a2 None a2
    a3 None a3
  q
  h None h
  i None i
  j None j

1 个答案:

答案 0 :(得分:1)

您必须跟踪您所在的类别,即点之前的部分。如果你不想再次在每个街区的末尾打印出类别,那会更容易,但是我们走了:

prev_cat = ""
for i, item in enumerate(l):     #iterate over the list
    if item.endswith("/"):       #identify category and category element, set tabulator
        curr_cat, printitem = item[:-1].split(".")
        tabulator = "    "    
    else:
        curr_cat, printitem, tabulator = "", item, ""

    #identify category, changes in category, print categories
    if curr_cat and (curr_cat != prev_cat):    
        if prev_cat:
            print(prev_cat)
        print(curr_cat)
    elif not curr_cat and prev_cat:
        print(prev_cat)

    prev_cat = curr_cat
    #print category items from both lists
    print(tabulator + " ".join([printitem, val[i], printitem]))  

if curr_cat:    #close the last category, if necessary
    print(curr_cat)      

如果val有足够的元素可供打印或l包含字符串,或者l中的每个字符串实际上以/结尾,则不会检查恰好包含两个由一个点分隔的部分。这被视为您问题指定的给定。