如何在python中向左或向右移动某些东西?

时间:2016-07-11 16:44:28

标签: python loops

遇到问题,让我说我有这个代码(最容易):

n=5
j=3
for i in range(n):
    print("kurt")
for x in range(j):
    print("karl")

如果我希望将它打印成一个协议,也就是说,我不希望它们彼此相继,我希望我的第二个for循环在我打印时位于第一个for循环的右侧它,像这样:

kurt karl
kurt karl
kurt karl
kurt
kurt

4 个答案:

答案 0 :(得分:2)

当然,只需将它们放在一份印刷声明中即可。

这里我告诉它循环最大数量(在这种情况下为5),然后循环达到最小数量(3)以停止打印第二个。< / p>

n = 5
j = 3
for i in range (max(n,j)):
    if i < min(n,j):
        print("kurt" + " " + "karl")
    else:
        print("kurt")

答案 1 :(得分:1)

据我所知,你想在上一个循环的右边打印下一个循环的值,你可以通过写这个来实现它:

在python 2.7中

for i, k in zip(range(n), range(j)):
   print "kurt",
   print "karl"

在python 3.x

for i, k in zip(range(n), range(j)):
       print("kurt", end=" ")
       print("karl")

答案 2 :(得分:0)

from itertools import izip_longest
first = ['kurt']*j
second = ['karl']*n
for l,r in  izip_longest(first ,second ):
   print l,r

输出:

kurt karl
kurt karl
kurt karl
None karl
None karl

如果你想要空格。

from itertools import izip_longest
first = ['kurt']*j
second = ['karl']*n
spaceJ,spaceN = len(first [0]),len(second [0])
for l,r in  izip_longest(first ,second ):
   print l if l else ' '*spaceJ,
   print r if r else ' '*spaceN 

输出

kurt karl
kurt karl
kurt karl
     karl
     karl

答案 3 :(得分:0)

假设“kurt”和“karl”的打印只是您尝试解决的更复杂问题的一个示例,这类问题的一般策略是使用Python generators来运行两个循环同时进行,然后将结果组合起来进行输出。

例如:

from itertools import zip_longest

n = 5
j = 3

def kurt():
    for i in range(n):
        yield "kurt"

def karl():
    for x in range(j):
        yield "karl"

for kurt_result, karl_result in zip_longest(kurt(), karl(), fillvalue=""):
    print(kurt_result, karl_result)

当函数体包含yield关键字时,Python会生成生成器而不是常规函数。调用生成器时,将返回一个迭代器,每次调用yield时都会生成一个值,然后等待直到读取下一个值,然后再继续执行下一个yield 。生成器函数返回后,迭代结束。

这里的最后for循环使用zip_longest,这是一个实用函数,它接受两个或多个迭代器并生成另一个迭代器,它产生从所有给定迭代器读取的组合序列一次,允许您轻松匹配每个迭代器的相应结果。

然后,此代码将生成以下输出:

kurt karl
kurt karl
kurt karl
kurt 
kurt 

(上面假设是Python 3.如果您使用的是Python 2,则zip_longest函数被命名为izip_longest,因此您需要调整两个引用。)