我有一个元组列表
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
有什么建议吗?感谢。
答案 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')]
>>>