首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中先打印有空字符串的排序列表

如何在python中先打印有空字符串的排序列表
EN

Stack Overflow用户
提问于 2019-09-25 18:08:30
回答 2查看 130关注 0票数 0

我有像这样的字符串

代码语言:javascript
运行
复制
list = ['stro', 'asdv', '', 'figh']

我使用的是:

代码语言:javascript
运行
复制
for ele in sorted(list):
    print(ele)

我需要这样的输出:

代码语言:javascript
运行
复制
asdv
figh
stro
empty space element from list

最后,我需要获取空字符串,并将其他字符串按顺序排序

如果我做一个反向排序,我想得到的输出是:

代码语言:javascript
运行
复制
 empty string element
 stro
 figh
 asdv
EN

回答 2

Stack Overflow用户

发布于 2019-09-25 18:26:42

您可以先打印非空排序的元素,然后再打印空元素:

代码语言:javascript
运行
复制
from itertools import chain

for element in chain(sorted(filter(bool, my_list)), filter(lambda x: not x, my_list)):
    print(element)
票数 0
EN

Stack Overflow用户

发布于 2019-09-25 19:17:40

您需要为比较定义自己的键。您希望空字符串放在最后。我们可以利用这样一个事实,一个空字符串是假的。

代码语言:javascript
运行
复制
>>> bool('a')
True
>>> bool('')
False

TrueFalse大,所以非空字符串将在空字符串之后排序,但我们需要的是另一种方式。

代码语言:javascript
运行
复制
>>> not 'a'
False
>>> not ''
True

作为第二个排序标准,我们将获取字符串本身。为此,我们必须比较元组(not s, s),其中s是字符串。

我们可以使用key参数和一个lambda函数将其提供给sorted

代码语言:javascript
运行
复制
>>> data = ['stro', 'asdv', '', 'figh']
>>> print(sorted(data, key=lambda s: (not s, s)))
['asdv', 'figh', 'stro', '']

如果希望反转,请添加reverse参数。

代码语言:javascript
运行
复制
>>> print(sorted(data, key=lambda s: (not s, s), reverse=True))
['', 'stro', 'figh', 'asdv']

请注意,我将变量list重命名为data。如果使用list,就会覆盖内置的list,即使是在示例中,这也不是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58095974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档