Python相交不一致的出现顺序

时间:2018-08-30 16:12:02

标签: python

我正在尝试获取字符串的日期时间分隔符列表,其顺序与它们在其中出现的顺序相同。

假设我有以下日期时间:2015-03-25 12:22:21;我打算从set().intersection获得的输出是这样的列表:['-', ' ']

问题是它被颠倒了。似乎是随机的。看一下以下输出:

[IN]: list(set('/|.-T ').intersection('2015-03-25 12:22:21'))
[OUT]: [' ', '-']

现在,这是正确的:

[IN]: list(set('/|.-T ').intersection('2015-03-25T12:22:21'))`
[OUT]: ['-', 'T']

为什么第一个首先与空格相反?如何才能获得一致的订单?

2 个答案:

答案 0 :(得分:3)

set不维持顺序,您必须通过循环来实现

output = []
for i in '2015-03-25 12:22:21':
    if i not in output and i in '/|.-T ']:
        output.append(i)

输出:

['-', ' ']

答案 1 :(得分:2)

这是一个保留分隔符原始顺序且不输出重复分隔符的版本。如果存在重复项,则输出中仅包含第一个。

def date_separators(datestring, seps):
    out = []
    for s in datestring:
        if s in seps and s not in out:
            out.append(s)
    return out

# test

data = (
    '2015-03-25 12:22:21',
    '2015-03-25T12:22:23',
    '5/6/2016 12:22:25 ',
)

seps = frozenset('/|.-T ')
for s in data:
    print(s, date_separators(s, seps))

输出

2015-03-25 12:22:21 ['-', ' ']
2015-03-25T12:22:23 ['-', 'T']
5/6/2016 12:22:25  ['/', ' ']