繁体   English   中英

在不带.sorted()的Python中对列表进行排序

[英]sorting the list in Python without .sorted()

我有一个列表a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]

如何不使用.sorted()获得列表b = ['a1,', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']

谢谢!

正如S.Mark所指出的那样,尽管有sorted()函数(返回一个新的排序列表),但是没有.sorted()方法用于列表,还有一个.sort()方法(用于对列表进行原位排序,返回None )。 如果您不打算使用sorted()函数,则:

a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]
a.sort()
b = a

否则,也许您可​​以进一步澄清您的问题。

似乎有点武断,不使用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']

那是你需要的吗?

不使用排序,但昂贵的方式。

a = ['a1', 'b1', 'c1', 'd1', 'a2', 'b2', 'c2', 'd2',]

分成两部分

['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()对其进行包装,然后将其分配给b

b = list(itertools.chain(*zip(a[:len(a)/2],a[len(a)/2:])))
=> ['a1', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']

只是b = sorted(a)

你也可以这样排序

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
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中,您必须将/更改为//以使其起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM