【发布时间】:2018-08-28 23:27:23
【问题描述】:
我只是想知道是否有一种方法可以改进这个 for 循环,以某种方式跳过那些。
var String 可以有更多参数,它们的顺序可以随意。
为了用实际值替换参数,我需要:
- 拆分它
- 检查参数是什么以及在哪个位置
这是一个关于我的想法的综合示例:
String = "{FullDate}_{Month}_{Day}_{Year}_{ElementID}_{ElementCD}"
String_split = String.split("_")
for params in range(len(String_split)):
if "FullDate" in String_split[params]:
# Do something
elif "Name" in String_split[params]:
# Do something
elif "ElementID" in String_split[params]:
# Do something
elif "ElementCD" in String_split[params]:
# Do something
elif "Year" in String_split[params]:
# Do something
elif "Day" in String_split[params]:
# Do something
elif "Month" in String_split[params]:
# Do something
更新:这就是我想要完成的事情
# Default values
FullDate = now().format("yyyy-MM-dd_HH:mm:ss")
Name = "John"
ElementID = "Apple"
ElementCD = "01Appxz"
Year = now().format("yyyy")
Day = now().format("dd")
Month = now().format("MM")
############################
String = "{FullDate}_{Month}_{Day}_{Year}_{ElementID}_{ElementCD}"
String_split = String.split("_")
for params in range(len(String_split)):
if "FullDate" in String_split[params]:
Report_Name = Report_Name + FullDate + "_"
elif "Name" in String_split[params]:
Report_Name = Report_Name + Name + "_"
elif "ElementID" in String_split[params]:
Report_Name = Report_Name + ElementID + "_"
elif "ElementCD" in String_split[params]:
Report_Name = Report_Name + ElementCD + "_"
elif "Year" in String_split[params]:
Report_Name = Report_Name + Year + "_"
elif "Day" in String_split[params]:
Report_Name = Report_Name + Day + "_"
elif "Month" in String_split[params]:
Report_Name = Report_Name + Month + "_"
# Report_Name must return default values, ordered by String variable (eg: FullDate, 1st position; Month 2nd position etc..)
# >> "1999-01-01_10:10:29_01_01_1999_Apple_01Appxz"
# if the String variable changes the params order to
# String = "{Year}_{Month}_{ElementCD}_{FullDate}_{ElementID}_{Day}"
# Report_Name should return
# >> "1999_01_01Appxz_1999-01-01_10:10:29_Apple_01"
【问题讨论】:
-
一般来说,您的方法是可以的(Python 没有
switch/case语句,因此使用if/elif或if/if链是完全pythonic)。如果您的do something语句非常相似(例如,始终具有不同参数的相同函数),那么您可以使用字典进行切换,但可读性可能会受到影响。 -
我会说
for param in String_split:作为首发。但取决于“做某事”的含义,可能还有更多的优化空间。 -
优化可能有,但你的方法没问题。
-
从整体上阅读这个问题让我相信这是一个 XY 问题。你到底想达到什么目的?如果您要做的只是用任意变量格式化字符串,那么还有更好的方法。
-
如果您有工作代码想在可读性、可维护性、兼容性和/或速度等主题上进行改进,请联系Code Review。跨度>
标签: python string for-loop replace split