gpt4 book ai didi

python - 在列表中搜索关键字并创建新列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:50 25 4
gpt4 key购买 nike

我正在尝试在列表中搜索关键字,如果列表没有关键字,它应该返回特定的字符串。

我尝试了下面的程序,但无法实现。

data = ['CUSTOMER/client1', 'DC/Dc1', 'OS/windows', 'PRODUCT/p1', '']

newdata = []
for d in data:
if 'CUSTOMER' in d:
newdata.append(d)
else:
newdata.append('No Customer')
if 'DC' in d:
newdata.append(d)
else:
newdata.append('No DC')
if 'OS' in d:
newdata.append(d)
else:
newdata.append('No OS')
if 'PRODUCT' in d:
newdata.append(d)
else:
newdata.append('No Product')
if 'TYPE' in d:
newdata.append(d)
else:
newdata.append('NO Type')

print(newdata)

我的输出:

['CUSTOMER/client1', 'No DC', 'No OS', 'No Product', 'NO Type', 'No Customer', 'DC/Dc1', 'No OS', 'No Product', 'NO Type', 'No Customer', 'No DC', 'OS/windows', 'No Product', 'NO Type', 'No Customer', 'No DC', 'No OS', 'PRODUCT/p1', 'NO Type', 'No Customer', 'No DC', 'No OS', 'No Product', 'NO Type']

我正在寻求输入

案例1:

data = ['CUSTOMER/client1', 'DC/Dc1', 'OS/windows', 'PRODUCT/p1', '']

newdata = ['CUSTOMER/client1', 'DC/Dc1', 'OS/windows', 'PRODUCT/p1', 'NOTYPE']

案例2:

data2 = ['CUSTOMER/client1', 'OS/windows', 'Type/type1','','']

newdata2 = ['CUSTOMER/client1', 'NODC','OS/windows','NOPRODUCT', 'Type/type1']

最佳答案

您的解决方案的问题在于,您正在逐条搜索记录,并且为每条记录附加所有其他值的否定结果,而不仅仅是正在搜索的值。

您在这里应该做的是查看关键字是否存在并获取其值,或者仅为该特定值附加负值。

这是一个可能的解决方案

data = ['CUSTOMER/client1', 'DC/Dc1', 'OS/windows', 'PRODUCT/p1', '']
newdata = []

customer = [s for s in data if "CUSTOMER" in s]
newdata.append(customer[0] if customer else "No Product")

dc = [s for s in data if "DC" in s]
newdata.append(dc[0] if dc else "No DC")

os = [s for s in data if "OS" in s]
newdata.append(os[0] if os else "No Product")

product = [s for s in data if "PRODUCT" in s]
newdata.append(product[0] if product else "No Product")

type = [s for s in data if "TYPE" in s]
newdata.append(type[0] if type else "No Type")

这是输出

['CUSTOMER/client1', 'DC/Dc1', 'OS/windows', 'PRODUCT/p1', 'No Type']

此解决方案的复杂度为 O(n2),因为对于您迭代的列表中的每个 n 值整个列表(总共 n 次迭代)。

<小时/>

为了降低算法的复杂性,您可以将列表转换为字典。这些具有 O(1) 查找。

要将list转换为dict,您可以执行以下操作。

data = dict(d.split('/') for d in data if "/" in d)

您将拥有以下内容

{'CUSTOMER': 'client1', 'DC': 'Dc1', 'OS': 'windows', 'Product': 'p1'}

现在您可以遍历关键字并获得您想要的任何内容:

data = dict(d.split('/') for d in data if "/" in d)

keywords = ['CUSTOMER', 'DC', 'OS', 'PRODUCT', 'TYPE']
newdata = []

for k in keywords:
newdata.append(f"{k}/{data[k]}" if k in data else f"No {k}")

你会得到:

['CUSTOMER/client1'、'DC/Dc1'、'OS/windows'、'Product/p1'、'无类型']

在这种情况下,您将在初始 data 列表上迭代一次(执行 n 次迭代),并在 keywords 上迭代一次(总体而言) n 次迭代),因此最终复杂度为 O(n)

<小时/>在这个特定的示例中,列表中的元素数量并不多,因此您不必太担心复杂性,但在具有更多值的类似情况下,后一个答案将节省一些时间。

关于python - 在列表中搜索关键字并创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59909789/

25 4 0
文章推荐: html - 如何使
文章推荐: c# - 通用类比较
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com