Как напечатать два списка разного размера рядом? - PullRequest
2 голосов
/ 27 марта 2020

У меня есть два списка разной длины, которые я хочу печатать рядом, разделенные вкладкой. В качестве примера:

a_list = ["a","b","c","d","e"]
b_list = ["f","g","h","i","j","k","l","m","n"]

Я пытался:

print('A-list:'+ '\t' + 'B-list:')
for i in range(len(b_list)):
    print(a_list[i] + '\t' + b_list[i])

Я, конечно, получаю обратно "вне диапазона", потому что один список короче. Я делаю не wi sh, чтобы использовать zip.

Ответы [ 5 ]

1 голос
/ 27 марта 2020

ваш код сбрасывает IndexError, потому что длина b_list больше, чем длина a_list, для этого вы можете использовать оператор try except:

for i in range(max(len(b_list), len(a_list))):
    try:
        print(f"{a_list[i]}\t", end="")
    except IndexError:
        print(f" \t", end="")
    try:
        print(f"{b_list[i]}\t")
    except IndexError:
        print(f" \t")

output:

a   f
b   g
c   h
d   i
e   j
    k
    l
    m
    n

0 голосов
/ 27 марта 2020

Во всех решениях хитрость заключается в том, чтобы go пройти по самому длинному списку и использовать пустое место для пропущенных записей в более коротком списке.

Например:

a_list = ['a','b','c','d','e'] 
b_list = ['f','g','h','i','j','k','l','m','n']

for i in range(max(len(a_list),len(b_list))):
    a = a_list[i:i+1] or [""]
    b = b_list[i:i+1] or [""]
    print(a[0]+"\t"+b[0])

Если вас не беспокоит использование памяти, вы также можете заполнить списки пробелами, чтобы упростить процесс печати, который предполагает списки одинакового размера:

padding  = len(b_list)-len(a_list)
a_padded = a_list + [""]*padding
b_padded = b_list + [""]*-padding
for i in range(len(a_padded)):
    print(a_padded[i]+"\t"+b_padded[i])
0 голосов
/ 27 марта 2020
def iterate(a_list, b_list):
  # iterate through short list
  min_length = min(((len(a_list), len(b_list)))) 

  for i in range(min_length):
    print('{}\t{}'.format(a_list[i], b_list[i]))

  # print remaining items accordingly
  if i + 1 == len(a_list):
    for item in b_list[i+1:]:
      print('\t{}'.format(item))  
  else:
    for item in a_list[i+1:]:
      print(item) 

Я советую использовать формат строкового метода, который позволяет вам иметь элементы любого типа в ваших списках.

0 голосов
/ 27 марта 2020

без лишних л oop:

list_a = ["A", "B", "C"]
list_b = ["1", "2", "3", "4"]
len_a = len(list_a)
len_b = len(list_b)
i = 0
while True:
    if i < len_a:
        print(list_a[i], end="")
    if i < len_b:
        print("\t", list_b[i], end="")
    print()
    i += 1
    if i > max(len_a, len_a):
        break
0 голосов
/ 27 марта 2020

Это возможное решение. Не имеет значения, если a_list длиннее или короче, чем b_list.

def get(lst, idx):
    try:
        return lst[idx]
    except:
        return " "

a_list = ['a','b','c','d','e'] 
b_list = ['f','g','h','i','j','k','l','m','n']

result = []

for i in range(min(len(a_list), len(b_list))):
    result.append(get(a_list, i))
    result.append(get(b_list, i))

for i in range(min(len(a_list), len(b_list)), max(len(a_list), len(b_list))):
    result.append(get(a_list, i))
    result.append(get(b_list, i))

print('\n'.join('\t'.join((result[i], result[i+1]))
                          for i in range(0, len(result), 2)))

Это печатает ожидаемый результат:

a   f
b   g
c   h
d   i
e   j
    k
    l
    m
    n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...