Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中基于数字从列表中删除元素_Python_List_Numpy - Fatal编程技术网

在python中基于数字从列表中删除元素

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

我有一个整数列表,我想删除其中包含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)
            #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 to
str()
。例如:

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 to
str()
。例如:

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]  
当在Python
for
中对列表进行迭代时,反对修改列表的警告是正确的

如果跟踪如何修改索引、如何测试是否完成,则可以在一般意义上的“迭代”过程中直接修改列表

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]  
当在Python
for
中对列表进行迭代时,反对修改列表的警告是正确的

如果跟踪如何修改索引、如何测试是否完成,则可以在一般意义上的“迭代”过程中直接修改列表

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