目录
实验目的
实验内容
列表切片原理
enumerate用法
filter用法
序列解包
编写程序,输入一个大于2的自然数,然后输出小于该数字的所有素数组成的列表。
输入:
10
输出
[2,3,5,7]
def issushu(i):
flag = True
for k in range(2, int(i/2) + 1):
if i % k == 0:
flag = False
break
return flag
# 声明用于存放素数的列表
primNumber = []
number=[]
print("请输入正整数:")
# 接收键盘输入
num = input()
# 判断是否为整数,如果不是,结束程序
if num.isdigit():
# num转化为int类型
num = int(num)
if num > 2:
# i即为要寻找的素数,常识可知,第一个是2,从2遍历到num
for i in range(2, num):
# flag用于标记当前的数是否为素数(true:素数,false:合数)
number.append(i)
primNumber=filter(issushu,number)
print(list(primNumber))
else:
print("输入是数字不能小于2!")
else:
print("输入了非法字符!")
在Python中,列表切片操作是一种方便且强大的方法,用于提取列表中的子集。通过使用切片操作,我们可以轻松地获取列表中的特定元素范围,而无需使用循环或其他复杂的代码结构。
列表切片的基本语法如下:
my_list[start:stop:step]
其中,
my_list
是要进行切片操作的列表,start
表示起始索引,stop
表示结束索引(不包含在结果中),step
表示步长(可选参数,默认为1)。以下是一些示例,展示了如何使用列表切片操作:
提取列表中的子集:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
subset = my_list[2:5] # 提取索引2到4之间的元素(不包括索引5)
print(subset) # 输出:[2, 3, 4]
从列表的开头或结尾提取元素:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
first_three = my_list[:3] # 提取列表开头的三个元素
last_three = my_list[-3:] # 提取列表末尾的三个元素
print(first_three) # 输出:[0, 1, 2]
print(last_three) # 输出:[7, 8, 9]
使用步长提取列表中的元素:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
every_other = my_list[::2] # 提取列表中的每隔一个元素
print(every_other) # 输出:[0, 2, 4, 6, 8]
需要注意的是,切片操作不会修改原始列表,而是返回一个新的列表对象。如果要对原始列表进行修改,可以将切片结果赋值给一个新变量,并对新变量进行修改,然后再将修改后的值赋回原始列表的相应位置。例如:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
subset = my_list[2:5] # 提取索引2到4之间的元素(不包括索引5)
subset[0] = 10 # 修改子集中的第一个元素
my_list[2:5] = subset # 将修改后的子集赋回原始列表的相应位置
print(my_list) # 输出:[0, 1, 10, 3, 4, 5, 6, 7, 8, 9]
在Python中,
enumerate()
是一个内置函数,用于在遍历一个序列(如列表、元组或字符串)时,同时获取每个元素的索引和值。enumerate()
函数返回一个枚举对象,其中包含每个元素的索引和值。以下是
enumerate()
函数的基本用法:
my_list = ['apple', 'banana', 'cherry']
for index, value in enumerate(my_list):
print(index, value)
输出:
0 apple
1 banana
2 cherry
在上面的例子中,
enumerate(my_list)
返回一个枚举对象,该对象在每次循环迭代时生成一个包含索引和值的元组(index, value)
。我们可以使用for
循环来遍历这个枚举对象,并在每次迭代中访问索引和值。
enumerate()
函数还可以接受一个可选的第二个参数,用于指定索引的起始值。例如:
my_list = ['apple', 'banana', 'cherry']
for index, value in enumerate(my_list, start=1):
print(index, value)
输出:
1 apple
2 banana
3 cherry
在这个例子中,我们通过将
start
参数设置为1,指定了索引的起始值为1,而不是默认的0。
在Python中,内置函数
filter()
用于过滤序列中的元素,返回一个由符合指定条件的元素组成的新序列。
filter()
函数接受两个参数:第一个参数是一个函数,用于指定过滤条件;第二个参数是一个序列,用于指定要过滤的序列。filter()
函数将依次将序列中的每个元素传递给指定的函数,如果函数返回True
,则将该元素保留在新序列中,否则将其过滤掉。以下是
filter()
函数的基本用法:
# 定义一个过滤函数,用于判断一个数是否为偶数
def is_even(num):
return num % 2 == 0
# 定义一个整数列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用filter()函数过滤偶数
even_numbers = filter(is_even, numbers)
# 将过滤结果转换为列表并输出
print(list(even_numbers))
输出:
[2, 4, 6, 8, 10]
在上面的例子中,我们定义了一个名为
is_even()
的函数,用于判断一个数是否为偶数。然后,我们定义了一个整数列表numbers
,并使用filter()
函数将列表中的偶数过滤出来。由于filter()
函数返回的是一个迭代器对象,我们使用list()
函数将其转换为列表,并输出结果。
在Python中,序列解包是一种方便且简洁的方式,用于将序列(如列表、元组或字符串)中的元素分配给多个变量。通过序列解包,我们可以一次性地将序列中的多个元素赋值给对应的变量,而无需逐个进行赋值操作。
序列解包的工作原理如下:
- 首先,我们需要有一个包含多个元素的序列,例如一个列表、元组或字符串。
- 然后,我们使用一个赋值语句,将序列中的元素分配给多个变量。在赋值语句的左侧,我们列出要接收元素的变量,并使用逗号分隔。在赋值语句的右侧,我们放置要解包的序列。
- Python解释器在执行这个赋值语句时,会依次将序列中的元素分配给左侧的变量。变量的数量需要与序列中元素的数量相匹配,否则将会引发一个
ValueError
异常。- 如果序列中的元素数量少于要接收元素的变量数量,那么未被分配值的变量将被赋予
None
值。- 如果序列中的元素数量多于要接收元素的变量数量,那么超出的元素将被忽略。
下面是一个简单的示例,展示了如何使用序列解包将列表中的元素分配给多个变量:
# 定义一个包含多个元素的列表
my_list = [1, 2, 3, 4, 5]
# 使用序列解包将列表中的元素分配给多个变量
a, b, c, d, e = my_list
# 输出变量的值
print(a) # 输出:1
print(b) # 输出:2
print(c) # 输出:3
print(d) # 输出:4
print(e) # 输出:5
在这个例子中,我们将
my_list
列表中的元素一次性地分配给了变量a
、b
、c
、d
和e
。通过序列解包,我们可以更快捷地进行变量赋值操作。