我有以下一段代码。
result = "1/1/2010|1/2/2111"
request = "1/1/1.3.4.5.6/1/1/127.0.0.1"
replylist = result.split("|")
finalresultlist = [
f"{i.split('/')[2]}.{j.split('/')[2]}"
for i in request
for j in replylist \
if (i.split("/")[1] == j.split("/")[1])
]
print(finalresultlist)
注意:根据每个{之后的索引[1]中的值,如果存在匹配f"{i.split('/')[2]}.{j.split('/')[2]}"
,则"1.3.4.5.6"
将"2010"
与if (i.split("/")[1] == j.split("/")[1])
连接起来{1}和result
字符串在request
上分割。
我想返回一个新字符串,该字符串将'|'
的1.3.4.5.6与request
的2010连接在一起,以返回包含字符串的列表:result
在当前代码中,出现错误“列表超出范围”。我无法解决此问题。
感谢您的帮助。
答案 0 :(得分:2)
好吧,让我们迈出第一步。
result = "1/1/2010|1/2/2111"
result = result.split("|")
现在result
是['1/1/2010', '1/2/2111']
request = "1/1/1.3.4.5.6/1/1/127.0.0.1"
request = request.split("/")
现在request
是['1', '1', '1.2.3.4.5.6', '1', '1', '127.0.0.1']
因此,获得所需结果的简单方法是
finalresult = "{}{}".format(request[2],result.split('/')[2])
我不确定您的循环逻辑,但是,您应该能够使用此代码根据您的业务逻辑以编程方式生成更多字符串。
答案 1 :(得分:2)
request
是一个字符串,对其进行迭代(for i in request
)一次可以给您一个字符。在我看来,您正在尝试一次做太多事情。
如果我们查看完整的错误消息(包括堆栈跟踪),则会看到有关该消息的建议:
Traceback (most recent call last):
File "/home/wjandrea/test.py", line 7, in <module>
for i in request
File "/home/wjandrea/test.py", line 9, in <listcomp>
if (i.split("/")[1] == j.split("/")[1])
IndexError: list index out of range
重新排列代码指出问题所在i.split("/")[1]
。
完全删除for i in request
,并用request
代替i
。
finalresultlist = [
f"{request.split('/')[2]}.{j.split('/')[2]}"
for j in replylist
if request.split("/")[1] == j.split("/")[1]
]
输出:['1.3.4.5.6.2010']
然后我们还可以进行其他一些改进,例如更好的变量名和将内容移出列表理解范围。
replies = [i.split('/') for i in result.split("|")]
request_list = request.split('/')
final_result_list = [
f"{request_list[2]}.{reply[2]}"
for reply in replies
if request_list[1] == reply[1]
]
print(final_result_list)