如何访问分隔字符串中的每个项,在列表中找到其匹配项?

2024-06-06 07:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个清单:

box = ["apple","orange","banana", "water"]

还有这个字符串:

CheckList = "1, orange | 2, apple | 3, banana | 4, milk"

注意:字符串有"|"","分隔符。|分隔符分隔每个项目,,分隔符分隔项目及其键(即keyitem|keyitem等)

问题: 我想遍历box列表中的每个项目,并在字符串CheckList中找到coresbindingkey。你知道吗

输出应如下所示:

foundItems = ["2","1","3", "water"]

我是一个乞丐,对文本处理和编程一般,有什么想法如何解决这个问题?你知道吗

我试过了,但没用。你知道吗

for i in CheckList.split("|"):
    for j in box:
        if i.split(",")[0] == j

Tags: 项目key字符串inboxappleforitem
3条回答

如果CheckList中的空格不一致(实际上它们不在您给出的示例中),我建议首先运行CheckList = CheckList.replace(" ","")来消除所有空格。否则一定要使用" | "", "。你知道吗

除此之外,您的代码应该可以正常工作。如果您使用foundItems = box.copy()初始化,那么您的循环可以如下所示

for i in CheckList.split("|"): # or " | "
    for j in range(len(box)):
        if i.split(",")[1] == box[j]:
            foundItems[j] = i.split(",")[0]

使用j in range(len(box))而不是j in box意味着很容易访问foundItems的相应元素。你知道吗

首先,从CheckList获取映射,然后从box查找它:

box = ["apple","orange","banana", "water"]
CheckList = "1, orange | 2, apple | 3,banana | 4,milk"

d = dict(reversed(items.split(',')) for items in CheckList.replace(' ', '').split('|'))
foundItems = [d[x] if x in d else x for x in box]
print foundItems

注意字符串中的空格。你知道吗

首先,看起来您在i.split(",")中检查了错误的索引。Python是0索引的,所以当您引用i.split(",")[0]时,您检查的是逗号的左侧(本例中的键),而您似乎希望它检查右侧(水果)。你知道吗

其次, 在解析这样的字符串时,请确保去掉了空格。例如,清单中的第一项是“1,橙色”。当您在“,”上拆分时,会得到一个由["1"," orange "]组成的数组。注意橙色字符串前后的空格。如果你试着比较"orange"" orange ",你会发现它们并不相等。您可以调用i.split(",")[1].strip()删除任何前导和尾随空格。你知道吗

最后,这个功能不是很有效。当您在另一个for循环中有一个for循环时,您正在检查CheckList中的每个元素以及box中的每个元素。这是O(n^2)复杂性。对于4个项目来说,这不是什么大不了的事情,但是如果这些列表更大,时间会很快增加。下面是如何编写此函数:

box = ["apple","orange","banana", "water"]
CheckList = "1, orange | 2, apple | 3,banana | 4,milk"
CheckDict = {}
for i in CheckList.split("|"):
    j = i.split(",")
    CheckDict[j[1].strip()] = j[0].strip()
foundItems = []
for i in box:
    if i in CheckDict:
        foundItems.append(CheckDict[i])
    else:
        foundItems.append(i)

相关问题 更多 >