Python中有效的方法是将元素添加到以逗号分隔的字符串中

时间:2010-05-20 04:34:36

标签: python string pylons

我正在寻找一种最有效的方法,将元素添加到逗号分隔的字符串中,同时保持字母的字母顺序:

例如:

string = 'Apples, Bananas, Grapes, Oranges'
addition = 'Cherries'
result = 'Apples, Bananas, Cherries, Grapes, Oranges'

此外,还有一种方法可以在保持ID时执行此操作:

string = '1:Apples, 4:Bananas, 6:Grapes, 23:Oranges'
addition = '62:Cherries'
result = '1:Apples, 4:Bananas, 62:Cherries, 6:Grapes, 23:Oranges'

非常感谢示例代码。非常感谢你。

4 个答案:

答案 0 :(得分:8)

对于第一种情况:

alist = string.split(', ')
result = ', '.join(sorted(alist + [addition]))

对于第二种情况:

alist = string.split(', ')
result = ', '.join(sorted(alist + [addition],
                          key=lambda s: s.split(':', 1)[1]))

如果您在列表中有数千个项目,那么第一个案例可能会显示出可衡量的绩效改善,如果您愿意采用bisect.insort的更大复杂性;但是这不支持key=,所以第二种情况下的额外复杂性将是惊人的,甚至可能不会给你任何表现。

只有当整个应用程序的配置文件显示此操作是其中的一个关键瓶颈时,才能考虑上一段中提到的优化类型(如果是这样,通过保留此数据可以获得更快的速度)结构作为单词列表,', ' - 仅在需要时将其加入输出目的,而不是为可能需要进行此类优化的极长列表分割和重新加入成千上万次。

答案 1 :(得分:3)

您确定要将数据存储为字符串吗?

维护一个集合或列表(或者在第二种情况下是字典)并在需要时生成字符串可能更有意义。如果数据不经常更改,请缓存字符串。

使用任何使用字符串作为主数据存储的解决方案,您可能最终会生成一个临时列表,以便更容易插入元素 - 因此保留列表更有意义。

答案 2 :(得分:2)

这是一种做你想做的事情的方法:

>>> ", ".join(sorted('Apples, Bananas, Grapes, Oranges'.split(", ") +
...                  ["Cherries"]))
'Apples, Bananas, Cherries, Grapes, Oranges'

和“在维护ID时”:

>>> ", ".join(sorted('1:Apples, 4:Bananas, 6:Grapes, 23:Oranges'.split(", ") + 
...                  ["62:Cherries"], key=lambda x: x.split(":")[1]))
'1:Apples, 4:Bananas, 62:Cherries, 6:Grapes, 23:Oranges'

我故意忽略了你要求“最有效”的做事方式的部分问题。证明算法是解决特定问题的最有效方法是未解决的计算机科学问题。它根本不可能完成,当然也没有当前的技术。

但是,如果您担心效率,则应存储中间数据结构,而对字符串执行这些操作;任何基于字符串的操作都会浪费大量时间来复制内存;只有在完成所有处理后,才能转换为字符串。

答案 3 :(得分:0)

我想一个简单的解决方案是:

result = string + ',' + addition