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