TypeError:在迭代元组python列表时不支持解码str

时间:2016-11-12 16:10:48

标签: python list lambda

我有一个元组列表

a = [('BC', 'CONTAINS'), ('CD', 'FREE_FROM'), ('BM', 'CONTAINS') , ('ZZ', nan), (nan, nan), (nan, 'FREE_FROM'), (nan, nan)]

我想要一个不包含任何nan的列表,也不包含元组的第二个元素是' FREE_FROM'结果列表如下所示:

res = [('BC', 'CONTAINS'),  ('BM', 'CONTAINS')]

目前我这样做:

res = [(x,y) for x,y in containsAllergen if (str(x,y) != ('nan', 'nan') or str(y) != 'FREE_FROM')]

但它抛出了主题中提到的错误:

TypeError: decoding str is not supported

有什么建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

我认为错误在:

#include <stdio.h>

int main(void) {
    char *days[] = {
        "Sunday",
        "Monday",
        "Tuesday",
        NULL
    };

    // Your style
    char **d = days;
    while ( *d ) {
        printf("day is %s\n", *d);
        d++;
    }

    // Or, more "scholastic" code
    for(const char **d = days; *d; d++)
        printf("day is %s\n", *d);

    return 0;

此外,我认为你需要“和”运算符来产生你需要的结果:

str(x,y)

答案 1 :(得分:0)

使用in运算符检查nan并使用operator.itemgetter提取第二项进行比较。

>>> import operator
>>> a = [('BC', 'CONTAINS'), ('CD', 'FREE_FROM'), ('BM', 'CONTAINS') , ('ZZ', nan), (nan, nan), (nan, 'FREE_FROM'), (nan, nan)]
>>> second_item = operator.itemgetter(1)
>>> [t for t in a if second_item(t) != 'FREE_FROM' and nan not in t]
[('BC', 'CONTAINS'), ('BM', 'CONTAINS')]
>>>