我有一个要在Python中按字母顺序排列的句子列表。但是,有时句子以引号开头。
我已经在Python上尝试了.sort()方法,但是该方法将所有以引号开头的句子按字母顺序排序在一起,然后对非引号句子进行排序。
sentences.sort()
期望的结果应该是一个列表,其中所有句子都按字母顺序排列,即使某些句子可能以标点符号开头。
答案 0 :(得分:2)
如果整个字符串以字母数字字符开头,请使用整个字符串作为排序键,否则请剪切第一个字符:
data = ['abc', '"efg"', 'def', "'aaa'"]
sorted(data, key=lambda s: s if s[0].isalnum() else s[1:])
# ["'aaa'", 'abc', 'def', '"efg"']
答案 1 :(得分:1)
我想这就是您想要的:
sorted(iterable, key=lambda s:s.strip('"\''))
答案 2 :(得分:0)
在排序之前,请删除列表中字符串开头的所有特殊字符和空格:
import re
data = ['? abc', '" efg"', ' def ', "'aaa'"]
print(sorted(data, key=lambda s: s if s.isalnum() else re.sub(r"^[^a-zA-Z0-9]+", '', s)))
这说明了在字符串开头有多个特殊字符或特殊字符后跟一个空格的情况。
输出:
["'aaa'", '? abc', ' def ', '" efg"']