小编Ena*_*aid的帖子

从Python中的列表中提取随机子列表

我有一个python字典如下:

{'APPLE_PROVIDERS' : ["some", "provider","can","be", "null"],
  ....
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是从密钥的列表(这是一个值)中获取一个随机子列表.不仅仅是一个元素,而是一个完全随机的子列表.这是我尝试过的:

a_list = a_dict.get('APPLE_PROVIDERS', "")
for item in a_list[randrange(0,len(a_list)) : randrange(0,len(a_list))]:
  ...do something.. 
Run Code Online (Sandbox Code Playgroud)

这件事有两个问题:

  1. 如果列表为空,或者dict查找失败,程序将失败,因为randrange有(0,0)作为参数,这会导致错误

  2. 很多时候,两个randrange()调用都会生成相同的数字,尤其是当列表很小时.这将返回一个空列表.例如a_list [5:5]

那么,处理上述案例的随机子列表的最佳方法是什么?另外,我不关心订购.一切正常.每次for循环开始时,我只想要一个完全随机的子列表0,1 ...直到len(a_list)元素.

如果列表可以在其他一些可以容纳类似元素的数据结构中进行更改,那么这对我也有用.

python random sublist

8
推荐指数
2
解决办法
8874
查看次数

将相同的共享指针的副本存储在不同的向量中是一种好的做法吗?

我有一个基类,BaseObject和两个派生类DerivedObject1DerivedObject2.他们有共同的行为和方法,但DerivedObject1还有一个额外的方法.我的主类MyClass存储(in std::vector)boost::shared_ptr这些类的实例.MyClass需要调用commonMethod()所有BaseObject,有时需要调用additionalMethod()所有DerivedObject1.

class BaseObject
{
  virtual void commonMethod();
}

Class DerivedObject1 : public BaseObject
{
  void commonMethod();
  void additionalMethod();
}

Class DerivedObject2 : public BaseObject
{
  void commonMethod();
}
Run Code Online (Sandbox Code Playgroud)

有两个向量的缺点MyClass,一个存储所有指针的DerivedObject1DerivedObject2,另一个向量只存储指针DerivedObject1?意思是我会有DerivedObject1两次所有的指针.但我认为对不同方法的要求至少是明确的.

class MyClass
{
  typedef std::vector<std::shared_ptr<BaseObject>> BaseObjectVector;
  typedef std::vector<std::shared_ptr<DerivedObject1>> DerivedObject1Vector;
  BaseObjectVector everything;
  DerivedObject1Vector only_derived1;

  void doSomething()
  {
    for (BaseObjectVector::iterator iter = everything.begin(); …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr c++03

7
推荐指数
1
解决办法
380
查看次数

使用 Python 中 QTextEdit 中的格式对齐文本

我想在 QTextEdit 中显示文本。我使用 format() 函数来对齐文本并使其看起来像一张干净的表格。虽然我在 shell 中显示文本时得到了完美的结果,但文本似乎没有在 QTextEdit 中对齐,就像字符的宽度变化一样。我主要看到字符“-”出现时的区别。

>>> first_line = "{:<10} {:<3} - {:<20}".format("1234", "EUR", "Mrs Smith")
>>> second_line = "{:<10} {:<3} - {:<20}".format("-45.62", "GBP", "M Doe")
>>> print first_line, "\n", second_line
1234       EUR - Mrs Smith
-45.62     GBP - M Doe
Run Code Online (Sandbox Code Playgroud)

shell 中的结果与预期一致。但是使用 QTextEdit 时,对齐方式不正确,因为您可以看到“EUR”和“GBP”之间的细微差别。在这个例子中它并不多,但是当我将它与更多行一起使用时,它看起来确实不正确。

my_text_edit = QTextEdit()
my_text_edit.append(first_line)
my_text_edit.append(second_line)
Run Code Online (Sandbox Code Playgroud)

此 QTextEdit 中的文本对齐方式不正确

我尝试使用 QPlainTextEdit 并得到相同的结果。无论如何用 QTextEdit/QPlainTextEdit 得到我想要的东西?或者我应该使用另一个显示小部件(不需要编辑,标签可以,但我喜欢文本编辑的外观)?

python format qt qtextedit

2
推荐指数
1
解决办法
1274
查看次数

标签 统计

python ×2

c++ ×1

c++03 ×1

format ×1

qt ×1

qtextedit ×1

random ×1

shared-ptr ×1

sublist ×1