我是Python新手。能帮我解释一下这个:
from sys import argv
script, filename = argv
print "We're going to erase %r." % filename
print "If you don't want that, hit CTRL-C (^C)."
print "If you don't want that, hit RETURN."
raw_input("?")
print "Opening the file..."
target = open(filename, 'w')
print "Truncating the file. Goodbye!"
target.truncate()
print "Now I'm going to ask you for three lines."
line1 = raw_input("line 1: ")
line2 = raw_input("line 2: ")
line3 = raw_input("line 3: ")
target.write(line1, "\n", line2, "\n", line3)
target = open(filename)
print target.read()
print "And finally, we close it."
target.close()
为什么当列表更改为字符串时切片结果会有所不同?
答案 0 :(得分:1)
字符串也是可以切片的迭代:
>>> "abcde"[1:-1]
'bcd'
列表的字符串表示形式是列表的元素,用逗号分隔,用括号括起来:
>>> str(list2)
'[1, 2, 3]'
因此,当您删除†可迭代字符串"[1, 2, 3]"
中的第一个和最后一个条目时,您将获得字符串"1, 2, 3"
(不是,就像您{ {1}}它,列表):
print
† 请记住,在Python中,您可以使用否定指标从迭代中的 last 条目到第一个,因此>>> str(list2)[1:-1]
'1, 2, 3'
是相当于[1:-1]
。也就是说,从第二个到倒数第二个的每个元素。
答案 1 :(得分:1)
切片适用于您正在切片的序列的各个元素,返回包含所选元素的相同类型的新对象。
您的列表包含整数,切片会生成一个包含所选整数的新列表。一个字符串包含字符,因此切片字符串会产生一个包含所选字符的新字符串。
如果您的列表只包含3个元素(整数1
,2
和3
),则您的字符串包含更多元素,即字符'['
,{{ 1}},'1'
(空格),' '
(逗号),','
,'2'
,' '
等,一直到{ {1}}最后。请注意,这些元素不是整数,并且没有为','
字符分配特殊含义,并且空格也计为字符。该字符串总共包含9个字符。
因此,当您对列表中的第一个和最后一个元素进行切片时,只剩下一个元素,即整数']'
。但切片后会删除,
(第一个字符)和2
,剩下的字符串为'['
,共有7个字符。
如果你让解释器回应这些对象(而不是使用']'
),它可能会更清楚:
'1, 2, 3'
请注意字符串对象周围的print()
引号。
答案 2 :(得分:1)
add()
表示从第一个元素切换到倒数第二个元素。直接切片[1:-1]
时,它会夺走第一个和最后一个元素(1和3),剩下的就是中间元素list2
。
在python中,字符串也被认为是可迭代的;每个角色都可以被认为是一个元素。 [2]
的字符串形式为list2
。因此,当您删除第一个和最后一个字符(左右括号)时,您将留下子字符串'[1, 2, 3]'
。