嵌套循环Python

时间:2015-03-22 17:19:00

标签: python loops data-structures nested

我想打印出文本列,我试图通过for循环来做到这一点。我试过用这个:

a = 0
while a<58:
    for x in Char[a],Numb[a]:
        print (x)
    a+=2

但是这会在不同的行上打印出两个值。是否有任何方法可以打印出来,如下所示:

A  1
B  2
C  3
D  4
E  5   ...etc

4 个答案:

答案 0 :(得分:1)

a = 0
while a<58:
    print Char[a], Numb[a]
    a+=2

或者如果您愿意,可以添加一些格式以使其成为固定宽度:

a = 0
while a<58:
    print '{0:3} {1}'.format(Char[a], Numb[a])
    a+=2

也许还有点清洁:

for a in xrange(0,58,2):
    print '{0:3} {1}'.format(Char[a], Numb[a])

答案 1 :(得分:1)

您可以使用enumeratefor循环:

>>> import string
>>> for i,j in enumerate(string.ascii_uppercase,1) :
...    print j,'\t',i #in python 3 print (j,'\t',i)
... 
A   1
B   2
C   3
D   4
E   5
F   6
G   7
H   8
I   9
J   10
K   11
L   12
M   13
N   14
O   15
P   16
Q   17
R   18
S   19
T   20
U   21
V   22
W   23
X   24
Y   25
Z   26

答案 2 :(得分:1)

一些评论:

  1. 将while循环重写为for循环更好,并且不太可能获得无限循环。
  2. zip
  3. 解包元组/列表很不错(例如a, b = (1, 2)
  4. 查看string formatting with Python,尤其是columns section。或者只使用\t(选项卡的ASCII符号)。
  5. 作为代码,它看起来像这样:

    import string
    
    chars = string.ascii_uppercase
    digits = string.digits
    
    for a in range(0, min(len(chars), len(digits)), 2):
        for char, digit in zip(chars[a], digits[a]):
            print("{0:>3} {1:>3}".format(char, digit))
    

    {i:>n}等格式化选项意味着:

    • >:右对齐(您不需要它。您也可以<或不做任何事。
    • i:元组的第i个元素
    • n:总共n列。这也没有必要。

    我通常会做类似的事情:

    import string
    
    chars = string.ascii_uppercase
    digits = string.digits
    
    headers = ["chars", "digits"]
    sizes = [(len(el) + 2) for el in headers]
    formatter = "{0:>" + str(sizes[0]) + "} {1:>" + str(sizes[1]) + "}"
    
    print(formatter.format(*headers))
    print("-"*(sum(sizes) + len(sizes)))
    for a in range(0, min(len(chars), len(digits)), 2):
        for char, digit in zip(chars[a], digits[a]):
            print(formatter.format(char, digit))
    

    给出了

      chars   digits
    -----------------
          A        0
          C        2
          E        4
          G        6
          I        8
    

答案 3 :(得分:0)

假设您的两个列表具有如下数据,则以下代码将执行此操作

# for python3
Char=['A', 'B', 'C', 'D', 'E']    # these lists can have as many elements as you want
Numb=[1,2,3,4,5]

for x,y in zip(Char, Numb):       #zip stops when the shorter list ends
  print (x +" "+ str(y) )

<强>输出

sh-4.2# python3 main.py                                                                                                                                                         
A 1                                                                                                                                                                             
B 2                                                                                                                                                                             
C 3                                                                                                                                                                             
D 4                                                                                                                                                                             
E 5