gpt4 book ai didi

Python:用一个替换多个列表项

转载 作者:行者123 更新时间:2023-12-05 01:03:32 25 4
gpt4 key购买 nike

我想写一个计算器程序。我的目标是将多个列表项(使用数据类型 str)替换为一个(int)。我已经尝试过 .insert() 方法,但它会创建一个新的内部列表并将其放在主列表的末尾。

类似这样的:

input_list = ['4','5','6','+','8','7','4']

#expected result
output_list = [456, '+', 874]

#actual result
input_list = ['4','5','6','+','8','7','4',['4','5','6']]

我也尝试过extend方法,也没有成功。

我的代码:

num = ""
start = ""
for x in range(len(list)):
if list[x].isdigit() == True:
if start == "":
start = x
num += list[x]
continue
else:
num += list[x]
continue
else:
num = int(num)
list.insert(num,list[start:x])
num = ""
start = ""
continue

最佳答案

您可以使用 itertools.groupby 并将 str.isdigit 传递给它的键。它将数字组合在一起。

from itertools import groupby

input_list = ["4", "5", "6", "+", "8", "7", "4"]

result = []
for k, g in groupby(input_list, key=str.isdigit):
string = "".join(g)
# It's True for numbers, False for operators.
if k:
number = int(string)
result.append(number)
else:
result.append(string)

print(result)

输出:

[456, '+', 874]

列表理解也可以:

from itertools import groupby

input_list = ["4", "5", "6", "+", "8", "7", "4"]

result = [
int("".join(g)) if k else "".join(g)
for k, g in groupby(input_list, key=str.isdigit)
]

print(result)

注意:我故意在列表理解中写了两个 "".join(g)。因为我不得不这样做。不要尝试使用海象,因为您不会得到预期的结果:

result = [
int((s := "".join(g))) if k else s
for k, g in groupby(input_list, key=str.isdigit)
]

(s := "".join(g)) 部分仅在 kTrue 时进行评估,并非总是如此。这意味着如果 kFalse,您将获得 s 的前一个值,该值在前一次迭代中评估,即 ' 456'.

关于Python:用一个替换多个列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74171123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com