在python中基于数字从列表中删除元素
我有一个整数列表,我想删除其中包含7、8、9或0的所有整数 这就是我到目前为止所做的:在python中基于数字从列表中删除元素,python,list,numpy,Python,List,Numpy,我有一个整数列表,我想删除其中包含7、8、9或0的所有整数 这就是我到目前为止所做的: import numpy as np def P(n): list = [] for i in range(10**(n-1),7*10**(n-1)): list.append(i) for i in list: for k in str(i): if k in ['7','8','9','0']: list.remove(i)
import numpy as np
def P(n):
list = []
for i in range(10**(n-1),7*10**(n-1)):
list.append(i)
for i in list:
for k in str(i):
if k in ['7','8','9','0']: list.remove(i)
#elif k == '8': list.remove(i)
#elif k == '9': list.remove(i)
#elif k == '10': list.remove(i)
return list
但它返回的是:
[11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 48, 50, 51, 52, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 68]
如何修复此代码,使其摆脱不需要的值?i、 e.18、20、28、30等。您可以使用列表理解和内置的
any()
方法重新创建列表,以检查不需要的列表中是否有任何数字。为了遍历这些数字,需要先键入cast tostr()
。例如:
def P(n):
l = []
for i in range(10**(n-1),7*10**(n-1)):
l.append(i)
l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))]
输出:
[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66]
还可以使用以下方法避免创建初始列表和for循环:
def P(n):
l = range(10**(n-1),7*10**(n-1))
l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))]
您可以使用列表理解和内置的
any()
方法重新创建列表,以检查不需要的列表中是否有任何数字。为了遍历这些数字,需要先键入cast tostr()
。例如:
def P(n):
l = []
for i in range(10**(n-1),7*10**(n-1)):
l.append(i)
l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))]
输出:
[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66]
还可以使用以下方法避免创建初始列表和for循环:
def P(n):
l = range(10**(n-1),7*10**(n-1))
l = [x for x in l if not any(y in ['7', '8', '9', '0'] for y in str(x))]
首先将迭代列表前的代码更改为list=range(10**n-1,7*10**n-1) range返回一个列表,不需要在列表上迭代来复制它。 其次,在第二个循环中,k迭代列表中每个字符串的字符。 对于列表中的i: 对于[7'、'8'、'9'、'0'、]中的k: 如果k在i中:
list.remove(i)首先在迭代list之前将代码更改为list=range(10**n-1,7*10**n-1) range返回一个列表,不需要在列表上迭代来复制它。 其次,在第二个循环中,k迭代列表中每个字符串的字符。 对于列表中的i: 对于[7'、'8'、'9'、'0'、]中的k: 如果k在i中:
列表。删除(i)另一个过滤器测试选项是使用
设置
交叉点
n=2
print([i for i in range(10**(n-1),7*10**(n-1))
if not {'7','8','9','0'} & set(str(i))
])
[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66]
当在Pythonfor
中对列表进行迭代时,反对修改列表的警告是正确的
如果跟踪如何修改索引、如何测试是否完成,则可以在一般意义上的“迭代”过程中直接修改列表
n =2
lst = list(range(10**(n-1),7*10**(n-1)))
i = 0
while i < len(lst):
if {'7','8','9','0'} & set(str(lst[i])):
lst.pop(i)
else:
i += 1
n=2
lst=列表(范围(10**(n-1),7*10**(n-1)))
i=0
而i
另一个过滤器测试选项是使用设置
交叉点
n=2
print([i for i in range(10**(n-1),7*10**(n-1))
if not {'7','8','9','0'} & set(str(i))
])
[11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 31, 32, 33, 34, 35, 36, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 61, 62, 63, 64, 65, 66]
当在Pythonfor
中对列表进行迭代时,反对修改列表的警告是正确的
如果跟踪如何修改索引、如何测试是否完成,则可以在一般意义上的“迭代”过程中直接修改列表
n =2
lst = list(range(10**(n-1),7*10**(n-1)))
i = 0
while i < len(lst):
if {'7','8','9','0'} & set(str(lst[i])):
lst.pop(i)
else:
i += 1
n=2
lst=列表(范围(10**(n-1),7*10**(n-1)))
i=0
而i
一定要修改您正在迭代的列表-疯狂随之而来。也不要给变量命名list
它隐藏了pythons的内置类型<代码>返回[i代表范围内的i(10**(n-1),7*10**(n-1)),如果全部(c不在'7890'中,代表str(i))中的c)]修改您正在迭代的列表-疯狂随之发生。也不要给变量命名list
它隐藏了pythons的内置类型<代码>返回[i代表范围内的i(10**(n-1),7*10**(n-1)),如果全部(c不在'7890'中,表示str(i)中的c))]