Я новичок в Python, и у меня есть эта проблема.
У меня есть список таких чисел:
n = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Я хочу напечатать от 11 до 37, что означает выход = 11, 13,.... 37.
Я попытался print(n[11:37])
но, конечно, он напечатает [37, 41, 43, 47], потому что это индекс диапазона.
Любые идеи или у Python есть встроенный метод для этого?
Это должно сделать работу...
n = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
n.sort()
mylist = [x for x in n if x in range(11, 38)]
print(mylist)
Хотите напечатать это как строку, разделенную запятой:
print(mylist.strip('[]'))
Это сработает. (Предполагаемый список сортируется)
print n[n.index(11): n.index(37)+1]
Выход:
[11, 13, 17, 19, 23, 29, 31, 37]
Учитывая, что ваш список заказан, и у него нет дубликатов:
n = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
print(",".join(map(str,n[n.index(11): n.index(37)+1])))
Здесь у вас живой пример
Использование numpy
:
import numpy as np
narr = np.array(n)
m = (narr >= 11) & (narr <= 37)
for v in narr[m]:
print(v)
# or, to get rid of the loop:
print('\n'.join(map(str, narr[m])))
это довольно просто, так как ваш список уже отсортирован, вы можете написать
my_list = [x for x in n if x in range(11, 38)]
print(*my_list)
то, что делает "*", состоит в том, что он распаковывает массив в отдельные элементы, термин, известный как распаковка. Это приведет к фактическому результату, который вы хотели, а не к массиву
Если ваши данные отсортированы, вы можете использовать выражение генератора либо с объектом range
либо с привязкой по цепочке:
n = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
print(*(i for i in n if i in range(11, 38)), sep=', ')
print(*(i for i in n if 11 <= i <= 37), sep=', ')
Если ваши данные не отсортированы и вы можете использовать индексы первых вхождений каждого значения, вы можете нарезать список:
print(*n[n.index(11): n.index(37)+1], sep=', ')
Результат с данными, которые вы предоставили:
11, 13, 17, 19, 23, 29, 31, 37