Python错误结果连接列表

2024-04-28 12:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python3,我被一个非常简单的练习所阻碍:
使用方括号表示法将字符串“不要惊慌”转换为“点击”。

这是我的密码:

phrase = "Don't panic!"
plist = list(phrase)
new_phrase = ''.join(plist[1:3]).join(plist[5:3:-1]).join(plist[-5:-7:-1])
print(new_phrase)

我希望输出字符串“on tap”

''.join(plist[1:3])     //"on"
.join(plist[5:3:-1])    //" t"
.join(plist[-5:-7:-1])  //"ap"

但是我有一个ontp。
为什么?!?

注意:我知道还有其他方法可以解决这个问题,我可以用不同的方式来解决。我不是在寻找一个替代的解决方案,我是在试图理解我上面写的代码有什么问题。


Tags: 字符串密码newontappython3listplist
3条回答

每一个连续的连接都是利用前面的东西来…嗯…连接元素。这就是为什么你的代码会给出这样的结果。建议打印中间产物。你知道吗

phrase = "Don't panic!"
plist = list(phrase)
new_phrase = ''.join(plist[1:3]).join(plist[5:3:-1]).join(plist[-5:-7:-1])

print(''.join(plist[1:3])) #'on'
print(plist[5:3:-1]) #[' ','t']
print(''.join(plist[1:3]).join(plist[5:3:-1])) #' ont'
print(plist[-5:-7:-1]) #['a','p']
print(new_phrase) #a ontp

.join()之前出现的任何内容都在括号内的每个元素中间隔:

'---'.join( "..." )  ==>  .---.---. 

您是join的链接调用,因此每个结果都被间隔到以下join部分:

phrase = "Don't panic!"
plist = list(phrase)

np1 = ''.join(plist[1:3])          # with itermediate results, see output
np2 = np1.join(plist[5:3:-1])      #   the slice is "t ", it puts 'on' between " " and "t"
np3 = np2.join(plist[-5:-7:-1])    #   the slice is "ap", it puts " ont" between
                                   #   'a' and 'p' 

print(np1,np2,np3 )   # ('on', ' ont', 'a ontp')

替代解决方案:

print( phrase[1:3]+phrase[5:3:-1]+phrase[7:5:-1] )

提供:

on tap

只需添加您的元素,而不是试图通过它们的前一个元素来连接其内容。你知道吗

phrase = "Don't panic!"
plist = list(phrase)
new_phrase = ''.join(plist[1:3]) + ''.join(plist[5:3:-1]) + ''.join(plist[-5:-7:-1])
print(new_phrase) # -> on tap

您的代码无法工作,因为您是通过[" ", "t"]["a", "p"]之前的元素加入它们的:

                         "a ontp"
                           | - joined
           _________________________________
           |                                |
         " ont"                             |
           | - joined                       |
 _______________________                    |
 |                      |                   |
"on"                [" ", "t"]          ["a", "p"]
 |                      |                   |
''.join(plist[1:3]).join(plist[5:3:-1]).join(plist[-5:-7:-1])

相关问题 更多 >