Python:如何将列表中以某个字母开头的元素复制到新的列表中,或者从列表中移除不以字母开头的元素

gkn4icbw  于 2023-03-13  发布在  Python
关注(0)|答案(5)|浏览(209)

我正在使用Pandas从excel文件中获取一个列表。

start_path = r'C:\scratch\\'
File = 'test.xlsx'
import pandas as pd 
mylist = []
df = pd.read_excel(start_path + File, sheet_name='GIS')
mylist = df['Column A'].tolist()

列表:

mylist = ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56', 'ABC']

我的目标是从这个列表创建一个新列表,只包含以LB开头的元素。

newlist = ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56']

或者只是从列表中删除所有不以'LB'开头的元素(从而从列表中删除ABC)。

newlist = [str(x for x in mylist if "LB" in x)]

我试过上面的方法,结果是:

['<generator object <genexpr> at 0x0000024B5B8F62C8>']

我还尝试了以下方法:

approved = ['LB']
mylist[:] = [str(x for x in mylist if any(sub in x for sub in approved))]

这将获得与之前相同的生成器对象消息。
我觉得这很简单,但我想不通。

toe95027

toe950271#

您可以在列表理解中使用str.startswith

mylist = ["LB-52/LP-7", "LB-53/LI-5", "LB-54/LP-8", "LB-55", "LB-56", "ABC"]

newlist = [value for value in mylist if value.startswith("LB")]
print(newlist)

图纸:

['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56']

您可以删除newlist = [str(x for x in mylist if "LB" in x)]中的str(),但这样会留下xxxLBxxx这样的值(LB在字符串中)

ubbxdtey

ubbxdtey2#

newlist = [x for x in mylist if x[0:2]=="LB"]

您还可以使用切片,并使用切片检查所需的索引

uqjltbpv

uqjltbpv3#

总的来说,panda做同样的工作比python快,因此在“转移”到python之前,你应该尝试在panda中完成大部分的计算和过滤。

mylist = df.loc[df['Column A'].str.startswith("LB"), 'Column A'].tolist()
mylist
>>> ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56']
uklbhaso

uklbhaso4#

mylist = ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56', 'ABC']
new_list = [*filter(lambda x: x.startswith('LB'), mylist)]
# ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56']
kknvjkwl

kknvjkwl5#

此代码有效

newlist = ['LB-52/LP-7', 'LB-53/LI-5', 'LB-54/LP-8', 'LB-55', 'LB-56']
mylist=   [ch for ch in newlist if ch[0:2]=="LB"]

相关问题