在指定范围内打印列表Python

时间:2018-06-22 16:47:32

标签: python list

我是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有任何内置方法可用于此?

6 个答案:

答案 0 :(得分:4)

这将起作用。 (假设列表已排序)

print n[n.index(11): n.index(37)+1]

输出:

[11, 13, 17, 19, 23, 29, 31, 37]

答案 1 :(得分:3)

这应该可以完成工作...

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('[]'))

答案 2 :(得分:1)

考虑到您的列表是有序的,并且没有重复项:

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])))

您在这里有一个live example

答案 3 :(得分: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])))

答案 4 :(得分:0)

这非常简单,因为您的列表已经排序,因此您可以编写

 my_list = [x for x in n if x in range(11, 38)]
 print(*my_list)

'*'的作用是将数组解压缩为单个元素,这个术语称为解包。这将产生您想要的实际结果而不是数组

答案 5 :(得分:-2)

如果您的数据已排序,则可以将生成器表达式与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