列表和字符串

时间:2015-08-02 02:07:08

标签: python string list python-3.x slice

我是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()

为什么当列表更改为字符串时切片结果会有所不同?

3 个答案:

答案 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个元素(整数123),则您的字符串包含更多元素,即字符'[',{{ 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]'