如何在python中只保留每个列表元素的第一个单词?

How to keep only first word of each list elements in python?

提问人:mac 提问时间:5/10/2023 更新时间:5/10/2023 访问量:65

问:

我有如下所示的列表

images =['atr5500-ve-7.8.1 version=7.8.1 [Boot image]' , 
'atr5300-ve-3.4.4','atr5600-ve-7.6.6','atr5300-ve-3.4.4',
'atr2300-ve-8.7.8','atr1200-ve-1.2.2','atr5600-ve-3.2.2']

基本上,我正在寻找有助于仅获取列表中所有元素的第一个单词的关键字,这意味着我期待这样的输出

images =['atr5500-ve-7.8.1' , 
'atr5300-ve-3.4.4','atr5600-ve-7.6.6','atr5300-ve-3.4.4',
'atr2300-ve-8.7.8','atr1200-ve-1.2.2','atr5600-ve-3.2.2']

我知道我必须使用 for 循环并遍历列表,例如 ,但不确定使用什么来剥离该单个列表元素并放回列表中。for i in list: list[i]= .....

python-3.x 字符串 列表 切片

评论

2赞 The fourth bird 5/10/2023
result = [s.split()[0] for s in images if s]
1赞 mac 5/10/2023
@Thefourthbird您的解决方案对我有用,但我不能将您的评论标记为答案。所以我在下面接受了另一个答案,这也有效。

答:

0赞 mrxra 5/10/2023 #1
import re

images =['atr5500-ve-7.8.1 version=7.8.1 [Boot image]' ,
'atr5300-ve-3.4.4','atr5600-ve-7.6.6','atr5300-ve-3.4.4',
'atr2300-ve-8.7.8','atr1200-ve-1.2.2','atr5600-ve-3.2.2']


print([re.sub(r'^([^\s]+).*$', '\\1', i) for i in images])

输出:

['atr5500-ve-7.8.1', 'atr5300-ve-3.4.4', 'atr5600-ve-7.6.6', 'atr5300-ve-3.4.4', 'atr2300-ve-8.7.8', 'atr1200-ve-1.2.2', 'atr5600-ve-3.2.2']

评论

0赞 Codist 5/10/2023
为此,RE是矫枉过正。str.split() 就足够了
0赞 mrxra 5/10/2023
公平点...但取决于以下假设:提供的 3 条采样线可以充分反映随时间推移的可能输入。正则表达式在“意外”输入方面往往不那么脆弱/更容易修复。虽然我承认这是个人喜好。
3赞 Łukasz Kwieciński 5/10/2023 #2

您可以按照@mrxra建议使用正则表达式,但我认为这有点矫枉过正,只需使用以下方法:split()

images =['atr5500-ve-7.8.1 version=7.8.1 [Boot image]' ,
'atr5300-ve-3.4.4','atr5600-ve-7.6.6','atr5300-ve-3.4.4',
'atr2300-ve-8.7.8','atr1200-ve-1.2.2','atr5600-ve-3.2.2']

result = [
    im.split(" ")[0] for im in images
]