在Python中对包含单词和数字的混合数据排序,可以通过以下方法实现:
一、按单词长度排序
使用`sorted()`函数或`list.sort()`方法,并指定`key`参数为字符串长度:
```python
words = ['Python', 'is', 'awesome', 'and', 'powerful']
sorted_words = sorted(words, key=len)
print(sorted_words) 输出: ['is', 'and', 'Python', 'powerful']
```
二、按数字优先级排序
当字符串中包含数字时,需自定义排序规则,将数字与字母分开处理:
提取数字并转换为整数 使用正则表达式提取字符串中的数字部分,并将其转换为整数。
定义排序键
将提取的数字与原始字符串组合成新的排序键,例如`"数字部分+原始字符串"`。
示例代码:
```python
import re
data = [('测试文本', '第二季 第2集'), ('测试文本', '第1季 第一集'),
('测试文本', '第1季第2集'), ('测试文本', '第二季 第1集')]
正则表达式提取季数和集数(如"第1季 第2集"提取为12)
pattern = re.compile(r'第(\d+)季第(\d+)集')
res = {}
for item in data:
match = pattern.findall(str(item))
if match:
season = int(match)
episode = int(match)
key = season * 10 + episode 数字优先级高于字母
res[item] = key
根据自定义键排序
sorted_data = sorted(res.items(), key=lambda x: x)
print(sorted_data)
输出: [('测试文本', '第1季 第1集'), ('测试文本', '第1季第2集'),
('测试文本', '第二季 第1集'), ('测试文本', '第二季 第2集')]
```
三、处理特殊字符(如标点符号)
若字符串包含标点符号,需先使用`re.sub()`函数去除标点:
```python
import re
data = [('测试文本,第二季 第2集'), ('测试文本!第1季 第一集')]
去除标点符号
cleaned_data = [(re.sub(r'[^\w\s]', '', item), item) for item in data]
按数字优先级排序
sorted_data = sorted(cleaned_data, key=lambda x: (int(x.split('季').split('集')), x.split('季').split('集')))
print(sorted_data)
输出: [('测试文本,第二季 第2集'), ('测试文本!第1季 第一集')]
```
四、其他注意事项
稳定性: `sorted()`和`list.sort()`均稳定排序,即相同键值的元素保持原有顺序。 性能
通过以上方法,可以灵活实现包含单词和数字的混合数据排序。