我有一个列表a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]
如何在不使用b = ['a1,', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']
的情况下获取列表.sorted()
?
谢谢!
答案 0 :(得分:5)
列表没有.sorted()
方法,但有sorted()
函数,如S.Mark指出(返回新的排序列表)和.sort()
方法(对列表进行排序并返回None
)。如果您打算不使用sorted()
函数,那么:
a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]
a.sort()
b = a
否则,也许你可以进一步澄清你的问题。
答案 1 :(得分:3)
似乎有点武断,不使用sorted()
。我想你的意思是,你不想以(默认)字母数字顺序对列表进行排序。
以下是如何定义用于按照套装排序代表扑克牌(a1到d13)的字符串的键,然后排名:
>>> def cardsortkey(card):
... return (card[0], int(card[1:]))
...
>>> cardsortkey('a1')
('a', 1)
>>> a = ['a1', 'b1', 'c1', 'd1',
... 'a2', 'b2', 'c2', 'd2',
... 'a11', 'b11', 'c11', 'd11']
>>> sorted(a, key=cardsortkey)
['a1', 'a2', 'a11', 'b1', 'b2', 'b11', 'c1', 'c2', 'c11', 'd1', 'd2', 'd11']
这就是你需要的吗?
答案 2 :(得分:2)
不使用分类但昂贵的方式。
a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]
将其拆分为2部分
['a1', 'b1', 'c1', 'd1',] ['a2', 'b2', 'c2', 'd2',]
拉链
[('a1', 'a2'), ('b1', 'b2'), ('c1', 'c2'), ('d1', 'd2')]
并展平它(在这里使用itertools)
import itertools
itertools.chain(*zip(a[:len(a)/2],a[len(a)/2:]))
itertools返回迭代器,所以如果你需要list,用list()包装它,并将它分配给b
b = list(itertools.chain(*zip(a[:len(a)/2],a[len(a)/2:])))
=> ['a1', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']
答案 3 :(得分:1)
只是b = sorted(a)
?
答案 4 :(得分:0)
l = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2']
numbersPerLetter = 2
lsorted = []
for i in range(len(l) / numbersPerLetter):
lsorted.extend([l[x+i] for x in range(0, len(l), len(l) / numbersPerLetter)])
print(lsorted)
输出:
['a1', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']
在Python 3.X中,您必须将/
更改为//
才能使其正常工作。
答案 5 :(得分:0)
你也可以这样排序
for i1, e1 in enumerate(a):
for i2, e2 in enumerate(a):
if e2 > e1:
e1 = a[i2]
a[i2] = a[i1]
a[i1] = e1