Python 如何从非int的列表中删除值?

Python 如何从非int的列表中删除值?,python,list,python-3.x,int,try-except,Python,List,Python 3.x,Int,Try Except,我尝试了以下函数。它应该得到一个列表列表,检查它的每个子列表是否包含int值,将其转换为int,或者如果不包含,则删除它。要做到这一点,应该创建一个newX,它将是一个只包含int的新子列表,以及一个包含子列表的新列表 我已经成功地从子列表中获取了值,但是我不知道如何将每个子列表的值放回x中。因为通过创建一个新的子列表,现在我需要一个全新的列表列表,我真的对整个事情感到困惑。一定有更简单的办法 def forceInt(list): newList = [] for x in l

我尝试了以下函数。它应该得到一个列表列表,检查它的每个子列表是否包含int值,将其转换为int,或者如果不包含,则删除它。要做到这一点,应该创建一个newX,它将是一个只包含int的新子列表,以及一个包含子列表的新列表

我已经成功地从子列表中获取了值,但是我不知道如何将每个子列表的值放回x中。因为通过创建一个新的子列表,现在我需要一个全新的列表列表,我真的对整个事情感到困惑。一定有更简单的办法

def forceInt(list):
    newList = []
    for x in list:
        newX = []
        for y in x:
            try:
                int(y)
            except:
                continue
            else:
                newX.append(int(y))
        newList.append(newX)
    return newList

print(forceInt(adsVal))
样本输入:

adsVal = [['Students', 'inactive', '3'], ['Campaign 1', 'not_delivering', '']]
样本输出:

[['3'], []]

如果要使用列表列表,只需使用嵌套列表理解:

其中数据是原始列表。这将产生:

>>> [[v for v in vs if isinstance(v,int)] for vs in data]
[[], []]
>>> [[v for v in vs if v.isdigit()] for vs in data]
[['3'], []]
然而,示例列表不包含任何整数:它包含表示数字的字符串。在这种情况下,应使用str.isdigit:

这将产生:

>>> [[v for v in vs if isinstance(v,int)] for vs in data]
[[], []]
>>> [[v for v in vs if v.isdigit()] for vs in data]
[['3'], []]
您可以将嵌套的dict理解与筛选器一起使用,如下所示:

>>> adsVal = {'Students': ['inactive', '3'], 'Campaign 1': ['not_delivering', '']}

#                           v returns `True` if the string is a digit
>>> {k:[vv for vv in v if vv.isdigit()] for k, v in adsVal.items()}}
{'Students': ['3'], 'Campaign 1': []}
编辑:根据问题中的编辑,不需要听写理解。为了获得值列表,可以使用列表理解表达式:

>>> [[vv for vv in v if vv.isdigit()] for v in adsVal.values()]
[['3'], []]

这有点冗长,但以下是我的看法:

adsVal = {'Students': ['inactive', '3'], 'Campaign 1': ['not_delivering', '']}

def check(value):
    try:
        int(value)
        return True
    except ValueError:
        return False

res = {k: [x for x in v if check(x)] for k, v in adsVal.items()}
print(res)  # {'Students': ['3'], 'Campaign 1': []}
现在进行编辑时,如果有列表列表,则可以应用相同的逻辑:

adsVal = [['Students', 'inactive', '3'], ['Campaign 1', 'not_delivering', '']]

def check(value):
    try:
        int(value)
        return True
    except ValueError:
        return False

res = [[x for x in sub if check(x)] for sub in adsVal]
print(res)  # [['3'], []]
你能行

In [1]: adsVal = [['Students', 'inactive', '3'], ['Campaign 1', 'not_delivering', '']]
In [2]: map(lambda x: filter(str.isdigit, x), adsVal)
Out[2]: [['3'], []]
Py3


这不是一个列表的列表,而是一个列表的目录…我的错,让我来修复它,但是为什么“学生”和“活动1”仍然是输出的一部分?我的错,抱歉它工作了!我需要一段时间才能理解,但谢谢!:@MiguelAlberolaCano看到了列表列表的编辑,在Python-3.x中,这将生成生成器,而不是列表。更新@WillemVanOnsemI我对输入和输出的含义感到困惑:Sit在ipython中。输入意味着输入,输出意味着输出,我爱这一切都在一行!太优雅了!我要这个。谢谢:规格有点变化,所以答案可能需要更新。尽管如此,+1还是非常优雅地解决了这个问题。@WillemVanOnsem感谢您在问题中指出了更新。我很感激!字典表格也很有用!谢谢
In [3]: list(map(lambda x: list(filter(str.isdigit, x)), adsVal))
Out[3]: [['3'], []]