Нарезка больших списков на основе ввода - PullRequest
0 голосов
/ 23 февраля 2019

Если у меня несколько списков, таких как

hello = [1,3,5,7,9,11,13]

bye = [2,4,6,8,10,12,14]

и пользовательский ввод 3

, есть ли способ получить выходные данные для возврата к 3 индексам в списке и запуска?чтобы получить:

9 10

11 12 

13 14

с вкладками \t между каждым пробелом.

, если пользователь введет 5

ожидаемый результат будет

5 6

7 8

9 10

11 12

13 14

Я пробовал

for i in range(user_input):
    print(hello[-i-1], '\t', bye[-i-1])

Ответы [ 6 ]

0 голосов
/ 23 февраля 2019

Если вы хотите проанализировать данные

Я думаю, использование pandas.datafrme может быть полезным.

INPUT_INDEX = int(input('index='))

df = pd.DataFrame([hello, bye])
df = df.iloc[:, len(df.columns)-INPUT_INDEX:]
for col in df.columns:
    h_value, b_value = df[col].values
    print(h_value, b_value)

console

index=3
9 10
11 12
13 14
0 голосов
/ 23 февраля 2019

Другое решение zip, но с одной строкой:

for h, b in zip(hello[-user_input:], bye[-user_input:]):
    print(h, b, sep='\t')

Предотвращает преобразование результата zip в list, поэтому единственные временные фильтры - это срезы hello и bye.Хотя итерации по индексу могут избежать этих временных значений, на практике почти всегда чище и быстрее выполнять срез и повторять значения, так как повторное индексирование является непитонным и на удивление медленным в CPython.

0 голосов
/ 23 февраля 2019

Вы можете использовать zip, чтобы вернуть списки кортежей, в которых i-й элемент взят из i-го итерируемого аргумента.

zip_ = list(zip(hello, bye))
for item in zip_[-user_input:]:
    print(item[0], '\t' ,item[1])

, а затем использовать отрицательный индекс, чтобы получить то, что вы хотите.

0 голосов
/ 23 февраля 2019

Вы можете zip два списка и использовать itertools.islice, чтобы получить желаемую часть вывода:

from itertools import islice
print('\n'.join(map(' '.join, islice(zip(map(str, hello), map(str, bye)), len(hello) - int(input()), len(hello)))))

При заданном входе 3, это выводит:

5 6
7 8
9 10
11 12
13 14
0 голосов
/ 23 февраля 2019

Использовать отрицательную индексацию в срезе.

hello = [1,3,5,7,9,11,13]

print(hello[-3:])

print(hello[-3:-2])

output

[9, 11, 13]
[9]
0 голосов
/ 23 февраля 2019

Просто используйте отрицательные индексы, которые начинаются с конца минус пользовательский ввод (-user_input) и переходят в конец (-1), что-то вроде:

for i in range(-user_input, 0):
    print(hello[i], bye[i])
...