返回函数的结果而不更改 if 语句中的列表项
Result of function is returned without changing list items in if-statement
提前感谢您的意见。
我今天开始学习 Python,因为我想在 DynamoBIM (Revit) 中定义自定义 Python 节点,以便在没有预定义/适合我的 BIM 任务的节点时更加灵活.
Python脚本从输入节点获取输入,这些输入节点是 IN[i]
。
在我的例子中,我使用 2 bool
值(IN[0]
、IN[3]
)、1x str
IN[1]
、1x float
IN[2]
和1x list
IN[4]
.
通过 Python 脚本处理输入后 returns 结果 (OUT
),可用于进一步的任务。
我尝试在每个列表项前面附加一个前缀,if IN[0] = True
并在每个列表项更改之前添加一个值 IN[2]
。结果显示在监视节点中。
在 IN[3] = False
的情况下(列表未被替换)我得到了想要的结果:
在 IN[3] = True
的情况下,自定义列表未进行调整(未添加前缀,未添加值):
(集成)Python脚本的代码:
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
praefix = IN[1]
add = IN[2]
if IN[3]:
listing = IN[4]
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
OUT = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
OUT = listing
Python-代码(在线编译器可编译)
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
replacingList = [2,2,3,"Test",4] #IN[4]
boolPraefix = True #IN[0]
praefix = "Indexwert: " #IN[1]
add = 7 #IN[2]
customList = True #IN[3]
replacingList = [2,2,3,"Test",4] #IN[4]
if customList:
listing = replacingList
if boolPraefix:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
print(listing)
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
print(listing)
我尝试使用 python 代码从在线编译器中的集成脚本中重现该问题,但在这种情况下计算出预期结果:
['Indexwert: 9', 'Indexwert: 9', 'Indexwert: 10', 'Test', 'Indexwert: 11']
编译为 https://www.programiz.com/python-programming/online-compiler/
预期结果应为:
我目前一点也不知道为什么在线编译器代码和集成的Python脚本之间会有不同的结果。
我以前在使用 dynamo 和 python 时遇到过一些问题,大多数时候我发现最好的做法是在代码末尾只使用一次 OUT
。
我拿了你的样品并修改了它,试试吧。
我添加了一个空列表,它将用作已处理列表的容器,并将其分配给输出
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
#Empty List to use as Output
NewListing =[]
praefix = IN[1]
add = IN[2]
if IN[3]:
listing = IN[4]
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
NewListing = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
NewListing = listing
OUT NewListing
并且不要忘记检查 Dynamo 内 Python 节点内的缩进。
进行了一些额外的编辑,解决方案正在运行:
以下(集成)PythonScript 在 Dynamo 中用作节点时产生预期结果:
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
praefix = IN[1]
add = IN[2]
custom = IN[4]
newListing = []
if IN[3]:
listing = custom
if IN[3]:
for x in range(len(custom)):
try:
listing[x] = int(custom[x])
except:
pass
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
newListing = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
newListing = listing
OUT = newListing
现在也可以为自定义列表实现结果:
提前感谢您的意见。
我今天开始学习 Python,因为我想在 DynamoBIM (Revit) 中定义自定义 Python 节点,以便在没有预定义/适合我的 BIM 任务的节点时更加灵活.
Python脚本从输入节点获取输入,这些输入节点是 IN[i]
。
在我的例子中,我使用 2 bool
值(IN[0]
、IN[3]
)、1x str
IN[1]
、1x float
IN[2]
和1x list
IN[4]
.
通过 Python 脚本处理输入后 returns 结果 (OUT
),可用于进一步的任务。
我尝试在每个列表项前面附加一个前缀,if IN[0] = True
并在每个列表项更改之前添加一个值 IN[2]
。结果显示在监视节点中。
在 IN[3] = False
的情况下(列表未被替换)我得到了想要的结果:
在 IN[3] = True
的情况下,自定义列表未进行调整(未添加前缀,未添加值):
(集成)Python脚本的代码:
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
praefix = IN[1]
add = IN[2]
if IN[3]:
listing = IN[4]
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
OUT = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
OUT = listing
Python-代码(在线编译器可编译)
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
replacingList = [2,2,3,"Test",4] #IN[4]
boolPraefix = True #IN[0]
praefix = "Indexwert: " #IN[1]
add = 7 #IN[2]
customList = True #IN[3]
replacingList = [2,2,3,"Test",4] #IN[4]
if customList:
listing = replacingList
if boolPraefix:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
print(listing)
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
print(listing)
我尝试使用 python 代码从在线编译器中的集成脚本中重现该问题,但在这种情况下计算出预期结果:
['Indexwert: 9', 'Indexwert: 9', 'Indexwert: 10', 'Test', 'Indexwert: 11']
编译为 https://www.programiz.com/python-programming/online-compiler/
预期结果应为:
我目前一点也不知道为什么在线编译器代码和集成的Python脚本之间会有不同的结果。
我以前在使用 dynamo 和 python 时遇到过一些问题,大多数时候我发现最好的做法是在代码末尾只使用一次 OUT
。
我拿了你的样品并修改了它,试试吧。
我添加了一个空列表,它将用作已处理列表的容器,并将其分配给输出
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
#Empty List to use as Output
NewListing =[]
praefix = IN[1]
add = IN[2]
if IN[3]:
listing = IN[4]
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
NewListing = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
NewListing = listing
OUT NewListing
并且不要忘记检查 Dynamo 内 Python 节点内的缩进。
进行了一些额外的编辑,解决方案正在运行:
以下(集成)PythonScript 在 Dynamo 中用作节点时产生预期结果:
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
praefix = IN[1]
add = IN[2]
custom = IN[4]
newListing = []
if IN[3]:
listing = custom
if IN[3]:
for x in range(len(custom)):
try:
listing[x] = int(custom[x])
except:
pass
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
newListing = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
newListing = listing
OUT = newListing
现在也可以为自定义列表实现结果: