为什么在这个python程序中输出“cbe”而不是“bce”?

时间:2014-01-23 08:48:15

标签: python

getDifference=lambda string1, string2: reduce((lambda character1, character2: character1+character2), (set(string1)-set(string2))) 

print getDifference('abcde','adf')

在第一行中,我定义了一个lambda表达式,用于查找string1和string2之间的差异。我假设输出应该是“bce”,但它是“cbe”,为什么?

2 个答案:

答案 0 :(得分:4)

集合是唯一元素的无序集合 - 因此字符的顺序不会通过集合操作保留。点击此处查看更多信息:

http://docs.python.org/2/tutorial/datastructures.html#sets

答案 1 :(得分:0)

Python集不保留排序。要保留订单,您可以使用列表解析:

def diff(s1, s2):
    return "".join([c for c in s1 if c not in s2])

diff('abcde','adf')     # 'bce'

许多set实现都使用散列,它将元素的顺序混合为副作用。但是,存在有序的集合实现,例如树集。