Альтернативное решение, использующее метод .query () :
In [5]: df.query("countries in @countries")
Out[5]:
countries
1 UK
3 China
In [6]: df.query("countries not in @countries")
Out[6]:
countries
0 US
2 Germany
Я предложил бы использовать следующую технику:
struct HexCharStruct
{
unsigned char c;
HexCharStruct(unsigned char _c) : c(_c) { }
};
inline std::ostream& operator<<(std::ostream& o, const HexCharStruct& hs)
{
return (o << std::hex << (int)hs.c);
}
inline HexCharStruct hex(unsigned char _c)
{
return HexCharStruct(_c);
}
int main()
{
char a = 131;
std::cout << hex(a) << std::endl;
}
Это коротко для записи, имеет ту же эффективность как исходное решение, и это позволяет Вам принять решение использовать "исходный" вывод символов. И это безопасно с точки зрения типов (не использование "злых" макросов:-))
Использование:
cout << "a is " << hex << (int) a <<"; b is " << hex << (int) b << endl;
И если Вы хотите дополнить начальными нулями тогда:
#include <iomanip>
...
cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
, Поскольку мы используем броски C-стиля, почему бы не пойти до конца с терминальной вредностью C++ и использовать макрос!
#define HEX( x )
setw(2) << setfill('0') << hex << (int)( x )
можно тогда сказать
cout << "a is " << HEX( a );
Редактирование: Однако решение MartinStettner намного более хорошо!
Я сделал бы это как MartinStettner, но добавил бы дополнительный параметр для количества цифр:
inline HexStruct hex(long n, int w=2)
{
return HexStruct(n, w);
}
// Rest of implementation is left as an exercise for the reader
, Таким образом, Вы имеете две цифры по умолчанию, но можете установить четыре, восемь, или безотносительно если Вы хотите.
, например,
int main()
{
short a = 3142;
std:cout << hex(a,4) << std::endl;
}
Это может походить на излишество, но поскольку сказал Bjarne: "библиотеки должны быть просты в использовании, не легки записать".
Это будет также работать:
std::ostream& operator<< (std::ostream& o, unsigned char c)
{
return o<<(int)c;
}
int main()
{
unsigned char a = 06;
unsigned char b = 0xff;
std::cout << "a is " << std::hex << a <<"; b is " << std::hex << b << std::endl;
return 0;
}
При использовании предварительной заливки и символов со знаком бойтесь добавлять нежелательный 'F
char out_character = 0xBE;
cout << setfill('0') << setw(2) << hex << unsigned short(out_character);
печать: ffbe
с помощью интервала вместо коротких результатов в ffffffbe
Для предотвращения нежелательного f's можно легко кашировать их.
char out_character = 0xBE;
cout << setfill('0') << setw(2) << hex << unsigned short(out_character) & 0xFF;