循环打印两个列表以获得两列,每个列表的每个元素的第一个字母之间有固定(自定义集)空间
Posted
技术标签:
【中文标题】循环打印两个列表以获得两列,每个列表的每个元素的第一个字母之间有固定(自定义集)空间【英文标题】:Loop print through two lists to get two columns with fixed(custom set) space between the first letter of each element of each list 【发布时间】:2012-08-18 23:20:12 【问题描述】:假设我有这两个列表:
column1 = ["soft","pregnant","tall"]
column2 = ["skin","woman", "man"]
如何在使用自定义的固定空间(例如 10,如示例)时循环打印这两个列表,从第一个列表的每个元素的第一个字母到第二个列表的每个元素的第一个字母列表?
设置间距为 10 的示例输出:
soft skin
pregnant woman
tall man
【问题讨论】:
zip docs.python.org/library/functions.html#zip 【参考方案1】:使用 Python 3
column1 = ["soft","pregnant","tall"]
column2 = ["skin","woman", "man"]
for line in zip(column1, column2):
print(':10'.format(*line))
【讨论】:
【参考方案2】:一个使用新样式字符串格式的衬里:
>>> column1 = ["soft", "pregnant", "tall"]
>>> column2 = ["skin", "woman", "man"]
>>> print "\n".join("0\t1".format(a, b) for a, b in zip(column1, column2))
soft skin
pregnant woman
tall man
【讨论】:
【参考方案3】:使用string formatting 轻松完成,
column1 = ["soft","pregnant","tall"]
column2 = ["skin","woman", "man"]
for c1, c2 in zip(column1, column2):
print "%-9s %s" % (c1, c2)
或者您可以使用str.ljust
,如果您希望填充基于变量,则更简洁:
padding = 9
for c1, c2 in zip(column1, column2):
print "%s %s" % (c1.ljust(padding), c2)
(注意:填充是9
而不是10
,因为单词之间有硬编码的空格)
【讨论】:
正如所写,这两种解决方案在“pregnant”的“t”和“woman”的“w”之间都有三个空格,而不是两个。我认为您可以删除打印字符串中的空格。 假设第二列的元素将包含比我的终端屏幕宽度更长的字符串。默认行为是这些字符串将“溢出”到我的第一列。如何让每一个这么长的字符串从第二列的起点继续? @DSM True,将填充量减少一将与预期输出完全匹配。删除%s
之间的空格可能会导致单词被混淆在一起。编辑答案
@Bentley4 您可以尝试clint,它会根据终端大小进行列换行。您可以使用this answer 和textwrap module 自己做类似的事情,但这会相当繁琐..【参考方案4】:
column1 = ["soft","pregnant","tall"]
column2 = ["skin","woman", "man"]
for row in zip(column1, column2):
print "%-9s %s" % row # formatted to a width of 9 with one extra space after
【讨论】:
【参考方案5】:怎么样:
>>> column1 = ["soft","pregnant","tall"]
>>> column2 = ["skin","woman", "man"]
>>> for line in zip(column1, column2):
... print ':10'.format(*line)
...
soft skin
pregnant woman
tall man
【讨论】:
以上是关于循环打印两个列表以获得两列,每个列表的每个元素的第一个字母之间有固定(自定义集)空间的主要内容,如果未能解决你的问题,请参考以下文章