Python筛选字符串中数字并重新排列

本文介绍了一种从不规则列表中提取数字并将其重塑为矩阵的方法。通过使用Python的字符串处理技巧及NumPy库,将嵌套列表中的所有数字提取出来,并最终转换成固定维度的矩阵形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

data是一个列表,要求提取出其中的数字,并按原规律排列成矩阵

>>> data = [[1, 2, [3, 4]], 5, 6, [7, 8], [1, 3, [6, 7]]]
>>> data
[[1, 2, [3, 4]], 5, 6, [7, 8], [1, 3, [6, 7]]]
>>> str_data = str(data)
>>> filter_digit = []
>>> for i in str_data:
...     if i.isdigit():
...             filter_digit.append(i)
...
>>> filter_digit
['1', '2', '3', '4', '5', '6', '7', '8', '1', '3', '6', '7']
>>> import numpy as np
>>>> arr_data = np.array(filter_digit)
>>> arr_data = np.array(filter_digit).reshape(3,4)
>>> arr_data
array([['1', '2', '3', '4'],
       ['5', '6', '7', '8'],
       ['1', '3', '6', '7']],
      dtype='<U1')
### 提取字符串中的英文字母 在 Python 中,可以通过多种方法来实现从字符串中提取英文字母的功能。以下是几种常见的解决方案: #### 方法一:正则表达式 可以利用 `re` 模块通过正则表达式匹配所有的英文字母。 ```python import re def extract_english_letters_regex(text): return ''.join(re.findall(r'[a-zA-Z]', text)) text = "I have a document! 123 with 英语 words." result = extract_english_letters_regex(text) print(result) # 输出: IhavedocumentwithEnglishwords ``` 这种方法使用了正则表达式的 `[a-zA-Z]` 来匹配所有大小写的英文字母[^1]。 --- #### 方法二:列表推导式与内置函数 另一种方式是借助列表推导式和 `str.isalpha()` 函数过滤掉非字母字符。 ```python def extract_english_letters_isalpha(text): return ''.join([char for char in text if char.isalpha() and (ord('A') <= ord(char) <= ord('Z') or ord('a') <= ord(char) <= ord('z'))]) text = "I have a document! 123 with 英语 words." result = extract_english_letters_isalpha(text) print(result) # 输出: IhavedocumentwithEnglishwords ``` 这里结合了 `isalpha()` 和 ASCII 值范围判断,确保只保留英文字母[^1]。 --- #### 方法三:集合操作 如果目标是从字符串中分离出单独的英文字母去重,则可采用集合的方式处理。 ```python def extract_unique_english_letters_set(text): english_letters = set(filter(lambda c: c.isalpha(), text)) return sorted(list(english_letters & set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"))) text = "I have a document! 123 with 英语 words." result = extract_unique_english_letters_set(text) print(''.join(result)) # 输出按字典序排列的独特英文字母组合 ``` 此法先筛选出所有字母再交集运算限定为英文字母[^1]。 --- ### 总结 以上三种方案各有优劣,具体选用取决于实际需求场景。对于简单连续文本提取推荐 **方法一** 或者 **方法二**;而当关注唯一性或者特殊排序时可以选择 **方法三**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值