删除列表中除字符串外的所有变量

时间:2019-10-23 13:57:32

标签: python python-3.x

我需要删除列表中的所有变量,但仅保留字符串,我该怎么做?

我只需要从列表中除去字符串以外的所有其他变量,但找不到任何可行的解决方案。

".\test.c", line 7: warning (etoa:4108): signed bit field of length 1
        const struct {const signed int bit : 1;} l_2 = {0};
                                       ^

".\test.c", line 6: warning (etoa:4177): variable "l_1" was declared but never referenced
        void* l_1[] = {&(*((void**)array[0]))};
              ^

".\test.c", line 7: warning (etoa:4177): variable "l_2" was declared but never referenced
        const struct {const signed int bit : 1;} l_2 = {0};
                                                 ^

".\test.c", line 7: error (etoa:1044): assignment to constant expression

此外,仅应保留编程语言。

4 个答案:

答案 0 :(得分:2)

您可以只使用try / except循环来测试字符串是否可以转换为浮点数,然后过滤掉可以转换的字符串/对象。这将删除可以转换为浮点数的整数,浮点数,布尔值和字符串,例如'9.0'

def float_test(x):
    try:
        float(x)
        return True
    except ValueError:
        return False

list(filter(lambda x: not float_test(x), list1))
# returns:
['python', 'java', 'c++', 'c#']

答案 1 :(得分:2)

执行此操作的线性方法是从头开始构建list并加深理解。这比重复的remove调用效率更高。您可以使用切片分配来更改原始list对象。字符串条件似乎已经过时,因为所有语言都是以以下字符开头的字符串:

list1 = ["9.0", "python", "java", "c++", 123, "c#", True, False]

langs = {"python", "java", "c++", "c#"}  # need some source of languages

list1[:] = [x for x in list1 if x in langs]
# ['python', 'java', 'c++', 'c#']

答案 2 :(得分:0)

def stringExtractor(list_of_stuff):
    new_li = []
    for i in list_of_stuff:
        try:
            new_li.append(float(i))
        except ValueError:
            new_li.append(i)
            pass
    return new_li


new_list = stringExtractor(list1)
new_list = [i for i in new_list if isinstance(i, str)]
print(new_list)

# Output: ['python', 'java', 'c++', 'c#']

答案 3 :(得分:0)

只需加上这种numpy / pandas的过大杀伤力即可:

import numpy as np
import pandas as pd

list1 = ["9.0","python","java","c++",123,"c#", True, False]

np.array(list1)[np.isnan(pd.to_numeric(list1, errors='coerce'))]

#array(['python', 'java', 'c++', 'c#'], dtype='<U6')