使列表中同类项只输出一次并且按从列表中第一次出现的顺序输出

就是说要保证一个原列表中我的同类相只输出一次,我找到了set方法新建了一个去掉同类相的列表,但是这样新的列表他会把我的项进行一个ACSII值从低到高的一个重新排序,但是我想要的是按照从原列表中第一次出现的顺序进行输出,有什么可用的简便的方法吗

a = [1,2,1,2,3,4,3,4,5]

b = []
for i in a:
    if i not in b:
        b.append(i)
print(b)


#!/usr/bin/python
datas = [1,2,"3","4",[5],[6],(7,),(8,)]
types = []
for data in datas:
    # print(type(data).__name__)
    if type(data).__name__  not in types:
        print(data)
        types.append(type(data).__name__)