【问题标题】:Joining a list of strings efficiently over multiple lines with a maximum linesize以最大行大小有效地在多行上加入字符串列表
【发布时间】:2015-11-30 14:40:08
【问题描述】:

我正在寻找一种方法来从一大串字符串中创建行。
字符串长度可以从 4 个字符到 20 个字符。
行大小最大为 255 个字符。
字符串应该用逗号+空格分隔(当然应该算2个丢失的字符)

我想尽可能高效地填充行,并尽可能长时间地使用所有 255 个字符。
字符串的顺序无关紧要。
然后,我想返回所有这些连接线的列表。

我知道基本的:

', '.join(my_list_of_strings)

然后最多拆分到 255 个字符以下,但这不是我需要的效率。

如果有一个好的 CSV 解决方案,我也接受(只是逗号分隔的字符串,最大行大小为 255)

编辑:
Textwrap 可以做到这一点,但没有我想要的那么智能:
我的问题文本为字符串,宽度为 20char:

print textwrap.fill(my_text, width=20)

I'm looking for a
way to make lines
out of a big list of
strings. String
length could be from
4 characters up to
20. The line size
maximum is 255
characters.

我想要的是这个:

I'm looking for a to
way make lines a big
out of list of could
strings. String from
length be characters
4 up to 20. The line
size maximum is 255
characters.

【问题讨论】:

  • 我不能 100% 确定您在问什么,但请查看 textwrap 模块。
  • 所以你想以这样一种方式重新排序字符串,以尽量减少行数而不超过 255 个字符?
  • 在第二次阅读时,这听起来像 bin packing problem,这是 NP 难的。如果您发现一种算法在所有输入上都能快速运行,请务必拿起您的Millennium Prize
  • @schwobaseggl,基本上是的。我想转换那个大的字符串列表并将这些字符串加入 X 行中,我想尽量保持 X 尽可能低。
  • @Kevin,我会研究那个模块。

标签: python string python-2.7 concatenation


【解决方案1】:

没有太多复杂性的贪婪方法:

1.按长度排序字符串,最长在前

2.从前面添加字符串,直到超过 255

3. 按长度手工挑选((二进制)搜索)一个字符串,让您尽可能接近 255尽可能

4. 仍然不完全是 255:删除最后添加的字符串并重复 *3.

5.(可选)如果没有字符串可以让您精确到 255,请搜索 2 (3, ...) 个字符串的组合来让您到达那里。

6. 重复 1-5 直到没有更多字符串

【讨论】:

  • 谢谢,这似乎是一个好方法,因为 Kevin 已经指出了“装箱问题”,因此我正在寻找的东西的复杂性。
猜你喜欢
  • 2011-09-30
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2020-09-14
  • 2017-10-12
  • 2018-12-01
  • 2022-10-21
  • 2016-12-15
相关资源
最近更新 更多