【问题标题】:Printing a grid from a list without \n showing从列表中打印网格而不显示 \n
【发布时间】:2015-06-18 08:30:13
【问题描述】:

我有一个单词列表,即[ cat, dog, bird, horse, pig, duck, frog, chicken, sheep, cow] 我想打印在这样的网格中说出其中的九个:

cat    dog    horse

bird   pig   duck

frog   chicken  sheep

有没有办法做到这一点? 此外,当我让他们打印出一行时,我会在每个项目的末尾得到 \n 换行符,这很烦人 - 有没有简单的解决方法

【问题讨论】:

标签: python list printing


【解决方案1】:

像这样:

li = [ 
    'cat', 'dog', 'bird', 
    'horse', 'pig', 'duck', 
    'frog', 'chicken', 'sheep', 
    'cow'
]

lines = [" ".join(li[x:x+3]) for x in xrange(0, len(li), 3)]
for line in lines:
    print line

【讨论】:

    【解决方案2】:

    我假设那些是字符串?在这种情况下,您可以使用 for 循环并打印整个字符串减去 \n 字符,例如 cat[:-2]。

    【讨论】:

      【解决方案3】:

      您可以逐步遍历您的列表,即每行的单词数。

      然后我使用[start:end] 范围选择我想要的列表部分,并使用join() 打印,这将连接列表中的所有项目,并在它们之间添加选定的字符串。

      然后我继续列表的下一部分。

      words = ['a','b','c','d','e','f','g','h','i','j']
      
      def printNum(n, lst):
          start = 0
          end = start + n
          for line in lst[::n]:
              print "\t".join(lst[start:end])
              start = end
              end = start + n
      print "3 words per line:"
      printNum(3, words)
      
      print "2 words per line:"
      printNum(2, words)
      

      输出:

      3 words per line:
      a       b       c
      d       e       f
      g       h       i
      j
      
      2 words per line:
      a       b
      c       d
      e       f
      g       h
      i       j
      

      【讨论】:

      • 您知道为什么当您将文本文件读入 python 的列表时,它会在每个项目的末尾添加 \n。这使得无法搜索某个项目,例如 cat,因为它现在是 cat\n
      • 您可以使用strip() 删除字符串开头和结尾的所有特殊字符。
      • 当你从文件中读取行时,你可以在每一行调用strip()来删除\ncharacters。
      • 好的,但它不会修改实际列表,这使得你很难找到项目,因为你必须寻找 cat\n 不是 cat 奇怪的语言是 python v.annoying
      • 更新您的问题并显示您正在努力解决的代码。
      【解决方案4】:

      您可以通过查找最长的单词(动物名称)并将该长度用作单词之间的填充来做到这一点。以下将字符串拆分为 3 个组。拆分后的任何提醒元素都将被忽略:

      animals = ['cat', 'dog', 'bird', 'horse', 'pig', 'duck', 'frog', 'chicken', 'sheep', 'cow']
      padding = max(map(len, animals)) + 2
      groups = zip(*(iter(animals),) * 3)
      
      for group in groups:
          print("".join(("{:%i}" % padding).format(a) for a in group))
      

      【讨论】:

        【解决方案5】:

        另一种解决方案:

        WORDS = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']
        
        # how much words to print out in a table
        word_count = 9
        # number of words in a row
        row_length = 3
        
        words = WORDS[:word_count]
        max_word_length = max(len(x) for x in words)
        
        for index, word in enumerate(words):
            word = "{0:>{1}}".format(word, max_word_length + 1)
            if (index + 1) % row_length:
                print word,
            else:
                print word
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          相关资源
          最近更新 更多