如何在Python中从重复的protobuf字段中删除项?
我有一个protobuf消息,它里面有一个可以重复的字段。我想从这个列表中删除一个项目,但我找不到一个好的方法来做到这一点,而不需要把所有的项目都复制到一个列表里,然后清空这个重复的字段,再把它们重新放回去。
在C++中有一个叫RemoveLast()
的函数,但在Python的API中似乎没有这个功能...
3 个回答
-1
在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的某个功能并没有按照预期工作。这种情况下,通常需要检查一下代码,看看是不是哪里出了问题。
有时候,问题可能出在代码的某个细节上,比如参数的设置不对,或者是调用的顺序不对。解决这些问题的关键是仔细阅读文档,了解每个功能的具体用法。
另外,社区的帮助也很重要。像StackOverflow这样的地方,很多人会分享他们的经验和解决方案。如果你在某个功能上卡住了,可以去搜索一下,看看有没有人遇到过类似的问题,或者直接发帖求助。
总之,遇到问题时,不要着急,慢慢分析,查阅资料,寻求帮助,通常都能找到解决办法。
const google::protobuf::Descriptor *descriptor = m_pMessage->GetDescriptor();
const google::protobuf::Reflection *reflection = m_pMessage->GetReflection();
const google::protobuf::FieldDescriptor* field = descriptor->FindFieldByName("my_list_name");
if (i<list_size-1)
{
reflection->SwapElements(m_pMessage, field, i, list_size-1);
}
reflection->RemoveLast(m_pMessage, field);
2
在Python中,从列表中删除一个元素可以这样做:
list.remove(item_to_be_removed)
或者
del list[index]
27
在文档中提到,Protobuf中包裹重复字段的对象就像普通的Python序列一样。因此,你可以直接这样做:
del foo.fields[index]
比如,要删除最后一个元素,可以这样:
del foo.fields[-1]