Python: 如何将列表中以特定字母开头的元素复制到新列表中或从列表中删除不以字母开头的元素
Python: How to copy elements from list that start with a certain letter into new list or remove elements from list that do not start with letter
我正在使用 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))]
这会得到与之前相同的生成器对象消息。
感觉很简单,就是想不通
您可以在 list-comprehension 中使用 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
在字符串中)
newlist = [x for x in mylist if x[0:2]=="LB"]
您还可以使用切片,也可以使用切片检查所需的索引
一般来说,pandas 往往比 python 更快地完成同样的工作。因此,在“移动”到 python.
之前,您应该尝试在 pandas 中进行大部分计算或过滤
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']
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']
此代码有效
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"]
我正在使用 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))]
这会得到与之前相同的生成器对象消息。
感觉很简单,就是想不通
您可以在 list-comprehension 中使用 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
在字符串中)
newlist = [x for x in mylist if x[0:2]=="LB"]
您还可以使用切片,也可以使用切片检查所需的索引
一般来说,pandas 往往比 python 更快地完成同样的工作。因此,在“移动”到 python.
之前,您应该尝试在 pandas 中进行大部分计算或过滤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']
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']
此代码有效
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"]