【问题标题】:Python script, replace item at index with item at indexPython脚本,将索引项替换为索引项
【发布时间】:2021-07-23 15:38:51
【问题描述】:

我正在尝试创建一个 python 脚本。

我有两个列表。

如果列表中的项目1

==[](空列表) 要么 =="Pxxx-xx"

那么它必须替换为第二个列表中相同索引的项目。

所以:

list1 =["P324-12","P321-01","Pxxx-xx",[],"P134-23"]

list2 =["A00","A01","A02","A03","A04"]

那么输出应该是:

out=["P324-12","P321-01","A02","A03","P134-23"]

现在我得到了这个工作:

list1 = IN[0]
replacement = IN[1]
out = []

for itm in list1:
    if itm == [] or itm == "Pxxx-xx":
        out.append(replacement)
    else:
        out.append(itm)
#Assign your output to the OUT variable.
OUT = out

但这只会用单个项目替换它,而不是替换列表中的项目。

现在我试过了:

list1 = IN[0]
list2 = IN[1]
out = []

for idx, itm in enumerate(list1):
    if itm == [] or itm == "Pxxx-xx":
        out.append(list2[idx])
    else:
        out.append(itm)
#Assign your output to the OUT variable.
OUT = out

但我收到警告:“IronPythonEvaluator.EvaluateIronPythonScript 操作失败。 unindent 不匹配任何外部缩进级别”

【问题讨论】:

  • 您的第二次尝试看起来不错;我无法重现错误。

标签: python list indexing replace


【解决方案1】:

不追加new list,而是用list1初始化new list,并在特定索引处替换new list中的值

list1 =["P324-12","P321-01","Pxxx-xx",[],"P134-23"]
list2 =["A00","A01","A02","A03","A04"]
out = list1
for i, itm in enumerate(out):
    if out[i] == [] or out[i] == "Pxxx-xx":
        out[i]=list2[i]
    

【讨论】:

  • 谢谢,这完全可行!现在我看到它很有意义,这是一种更简单的做事方式
【解决方案2】:

我尝试了以下方法,它似乎有效:

list1 =["P324-12","P321-01","Pxxx-xx",[],"P134-23"]
list2 =["A00","A01","A02","A03","A04"]
out = []

for idx, itm in enumerate(list1):
    if itm == [] or itm == "Pxxx-xx":
        out.append(list2[idx])
    else:
        out.append(itm)
#Assign your output to the OUT variable.
print(out)

那部分有什么用:

list1 = IN[0]
list2 = IN[1]

【讨论】:

  • 如果您无法真正回答问题,请留下评论。
  • 这是一个脚本,它是 Autodesk Revit 发电机脚本的一部分,这些规则只是为了获取输入。 image example
  • 即使接受的答案更简洁,脚本的第二个版本应该仍然有效。也许一些额外的空间隐藏在某个地方
猜你喜欢
  • 1970-01-01
  • 2012-02-20
  • 2017-03-31
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2016-12-15
  • 2013-12-12
相关资源
最近更新 更多