毛狗句子网—你身边的句子专家

毛狗句子网—你身边的句子专家

python中单词和数字怎样排序

59

在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()`均稳定排序,即相同键值的元素保持原有顺序。

性能:对于大规模数据,`numpy.sort()`(需安装NumPy库)或`pandas.Series.sort_values()`(需安装pandas库)可能更高效。

通过以上方法,可以灵活实现包含单词和数字的混合数据排序。