I’m confused about why this can work for strings but not for lists. Does anyone have any suggestions as to why it might be?
def switcheroo(test):
return test[1] test[0] test[2:]
CodePudding user response:
Although string and lists are both sequences, the interpretation of [] brackets varies depending on what expression is inside of them. If it's just a single integer value, then it used a the index of that element in the string or list, but when it the expression contains one or more : characters it's a slice and it evaluates to the specified subset of the original object — i.e. a substring or a sublist.
A way to write a function that handles both would be to restrict yourself to using slices:
def switcheroo(test):
# return test[1] test[0] test[2:]
return test[1:2] test[0:1] test[2:]
test1 = 'abcdef'
print(switcheroo(test1)) # -> bacdef
test2 = ['st','ack','over','flow']
print(switcheroo(test2)) # -> ['ack', 'st', 'over', 'flow']
CodePudding user response:
When test is a str any of the three - test[1] , test[0], and test[2:] are str. When test is a list, first two -test[1] and test[0] are str, but test[2:] is a list (even with one element). And as discussed in your other question, you cannot concatenate str and list.
Note, I say str, but they can be any type. I just know they are str from your other question.
