assert [1, 2] + [3, 4] == [1, 2, 3, 4]
assert [] + [1, 2] == [1, 2]
assert [1, 2] + [] == [1, 2]
assert [] + [] == []
assert [1] + [2] + [3] + [4] == [1, 2, 3, 4]
assert [[1]] + [[2]] == [[1], [2]]
lst = [1, 2]
lst += [3, 4]
assert lst == [1, 2, 3, 4]
lst = [1]
alias = lst
lst += [2]
assert lst is alias
assert alias == [1, 2]
lst = [1, 2, 3]
index = 1
lst[index] += 5
assert lst == [1, 7, 3]
try:
lst = [1]
lst[5] += 1
assert False, 'subscript += past the end of a list should raise IndexError'
except IndexError as e:
assert e.args == ('list index out of range',)
lst = [1]
lst += []
assert lst == [1]
lst = [1]
lst += [2]
lst += [3]
assert lst == [1, 2, 3]
lst = [1, 2]
lst += lst
assert lst == [1, 2, 1, 2]
assert len([]) == 0
assert len([1, 2, 3]) == 3
lst = [1]
lst.append(2)
assert len(lst) == 2
a = []
a.append('value')
assert a[0] == 'value'
a = [1, 2, 3]
assert a[0 - 1] == 3
assert a[-1] == 3
assert a[-2] == 2
assert repr([]) == '[]'
assert str([]) == '[]'
assert repr([1, 2, 3]) == '[1, 2, 3]'
assert str([1, 2, 3]) == '[1, 2, 3]'
assert [1, 2] * 3 == [1, 2, 1, 2, 1, 2]
assert 3 * [1, 2] == [1, 2, 1, 2, 1, 2]
assert [1] * 0 == []
assert [1] * -1 == []
assert [] * 5 == []
assert [1, 2] * 1 == [1, 2]
assert [[1]] * 2 == [[1], [1]]
lst = [1, 2]
lst *= 2
assert lst == [1, 2, 1, 2]
lst = [1]
lst *= 0
assert lst == []
assert list() == []
assert list([1, 2, 3]) == [1, 2, 3]
assert list((1, 2, 3)) == [1, 2, 3]
assert list(range(3)) == [0, 1, 2]
assert list('abc') == ['a', 'b', 'c']
assert list(b'abc') == [97, 98, 99]
assert list({'a': 1, 'b': 2}) == ['a', 'b']
assert list('héllo') == ['h', 'é', 'l', 'l', 'o']
assert list('日本') == ['日', '本']
assert list('a🎉b') == ['a', '🎉', 'b']
lst = []
lst.append(1)
assert lst == [1]
lst.append(2)
assert lst == [1, 2]
lst.append(lst) assert len(lst) == 3
lst = [1, 2, 3]
lst.insert(0, 'a')
assert lst == ['a', 1, 2, 3]
lst = [1, 2, 3]
lst.insert(1, 'a')
assert lst == [1, 'a', 2, 3]
lst = [1, 2, 3]
lst.insert(3, 'a')
assert lst == [1, 2, 3, 'a']
lst = [1, 2, 3]
lst.insert(100, 'a')
assert lst == [1, 2, 3, 'a']
lst = [1, 2, 3]
lst.insert(-1, 'a')
assert lst == [1, 2, 'a', 3]
lst = [1, 2, 3]
lst.insert(-2, 'a')
assert lst == [1, 'a', 2, 3]
lst = [1, 2, 3]
lst.insert(-100, 'a')
assert lst == ['a', 1, 2, 3]
lst = [1, 2, 3]
assert lst.pop() == 3
assert lst == [1, 2]
lst = [1, 2, 3]
assert lst.pop(0) == 1
assert lst == [2, 3]
lst = [1, 2, 3]
assert lst.pop(1) == 2
assert lst == [1, 3]
lst = [1, 2, 3]
assert lst.pop(-1) == 3
assert lst == [1, 2]
lst = [1, 2, 3]
assert lst.pop(-2) == 2
assert lst == [1, 3]
lst = [1, 2, 3, 2]
lst.remove(2)
assert lst == [1, 3, 2]
lst = ['a', 'b', 'c']
lst.remove('b')
assert lst == ['a', 'c']
lst = [1, 2, 3]
lst.clear()
assert lst == []
lst = []
lst.clear()
assert lst == []
lst = [1, 2, 3]
copy = lst.copy()
assert copy == [1, 2, 3]
assert copy is not lst
lst.append(4)
assert copy == [1, 2, 3]
lst = [1, 2]
lst.extend([3, 4])
assert lst == [1, 2, 3, 4]
lst = [1]
lst.extend((2, 3))
assert lst == [1, 2, 3]
lst = [1]
lst.extend(range(2, 5))
assert lst == [1, 2, 3, 4]
lst = [1]
lst.extend('ab')
assert lst == [1, 'a', 'b']
lst = []
lst.extend([])
assert lst == []
lst = [1, 2, 3, 2]
assert lst.index(2) == 1
assert lst.index(3) == 2
assert lst.index(2, 2) == 3
assert lst.index(2, 1, 4) == 1
_I64_MIN = -(2**63)
assert lst.index(1, _I64_MIN) == 0
assert lst.index(2, _I64_MIN, 4) == 1
lst = [1, 2, 2, 3, 2]
assert lst.count(2) == 3
assert lst.count(1) == 1
assert lst.count(4) == 0
assert [].count(1) == 0
lst = [1, 2, 3]
lst.reverse()
assert lst == [3, 2, 1]
lst = [1]
lst.reverse()
assert lst == [1]
lst = []
lst.reverse()
assert lst == []
lst = [3, 1, 2]
lst.sort()
assert lst == [1, 2, 3]
lst = ['b', 'c', 'a']
lst.sort()
assert lst == ['a', 'b', 'c']
lst = [3, 1, 2]
lst.sort(reverse=True)
assert lst == [3, 2, 1]
lst = []
lst.sort()
assert lst == []
lst = [1]
lst.sort()
assert lst == [1]
lst = ['banana', 'apple', 'cherry']
lst.sort(key=len)
assert lst == ['apple', 'banana', 'cherry']
lst = [[1, 2, 3], [4], [5, 6]]
lst.sort(key=len)
assert lst == [[4], [5, 6], [1, 2, 3]]
lst = [[1, 2, 3], [4], [5, 6]]
lst.sort(key=len, reverse=True)
assert lst == [[1, 2, 3], [5, 6], [4]]
lst = [-3, 1, -2, 4]
lst.sort(key=abs)
assert lst == [1, -2, -3, 4]
lst = [3, 1, 2]
lst.sort(key=None)
assert lst == [1, 2, 3]
lst = [3, 1, 2]
lst.sort(key=None, reverse=True)
assert lst == [3, 2, 1]
lst = []
lst.sort(key=len)
assert lst == []
lst = ['-3', '1', '-2', '4']
lst.sort(key=int)
assert lst == ['-3', '-2', '1', '4']
lst = ['10', '2', '1', '100']
lst.sort(key=int)
assert lst == ['1', '2', '10', '100']
lst = ['10', '2', '1', '100']
lst.sort(key=int, reverse=True)
assert lst == ['100', '10', '2', '1']
def last_char(s):
return s[-1]
lst = ['cherry', 'banana', 'apple']
lst.sort(key=last_char)
assert lst == ['banana', 'apple', 'cherry']
lst = ['']
try:
lst.sort(key=last_char)
except IndexError:
pass
xs1 = [3, 2, 1]
def empty_key(value):
assert len(xs1) == 0
return value
xs1.sort(key=empty_key)
assert xs1 == [1, 2, 3]
xs2 = [3, 2, 1]
def repopulate_key(value):
xs2.append(99)
return value
try:
xs2.sort(key=repopulate_key)
assert False, 'expected ValueError when key callback repopulates the list'
except ValueError as exc:
assert str(exc) == 'list modified during sort'
assert xs2 == [1, 2, 3]
lst = [1, 2, 3]
lst[0] = 10
assert lst == [10, 2, 3]
lst = [1, 2, 3]
lst[1] = 20
assert lst == [1, 20, 3]
lst = [1, 2, 3]
lst[2] = 30
assert lst == [1, 2, 30]
lst = [1, 2, 3]
lst[-1] = 100
assert lst == [1, 2, 100]
lst = [1, 2, 3]
lst[-2] = 200
assert lst == [1, 200, 3]
lst = [1, 2, 3]
lst[-3] = 300
assert lst == [300, 2, 3]
lst = [1, 2, 3]
lst[0] = 'hello'
assert lst == ['hello', 2, 3]
lst = [1, 2, 3]
lst[1] = [4, 5]
assert lst == [1, [4, 5], 3]
lst = [1, 2, 3]
lst[0] = None
assert lst == [None, 2, 3]
lst = [0, 0, 0]
lst[0] = 1
lst[1] = 2
lst[2] = 3
assert lst == [1, 2, 3]
lst = ['a', 'b', 'c', 'd']
lst[1] = 'B'
assert lst[0] == 'a'
assert lst[1] == 'B'
assert lst[2] == 'c'
assert lst[3] == 'd'
lst = ['a', 'b', 'c']
assert lst[False] == 'a'
assert lst[True] == 'b'
lst = ['x', 'y', 'z']
lst[False] = 'X'
assert lst == ['X', 'y', 'z']
lst = ['x', 'y', 'z']
lst[True] = 'Y'
assert lst == ['x', 'Y', 'z']
assert [[1, 2], [3, 4]] == [[1, 2], [3, 4]]
assert [[1, 2], [3, 4]] != [[1, 2], [3, 5]]
assert [[]] != [[1]]
assert [[[1]]] == [[[1]]]
assert [[[1]]] != [[[2]]]
assert [[1], 2] == [[1], 2]
assert [[1], 2] != [[1], 3]
assert repr([[1, 2], [3, 4]]) == '[[1, 2], [3, 4]]'
assert repr([[]]) == '[[]]'
assert repr([[1], [2, 3]]) == '[[1], [2, 3]]'
x = [1, 2]
lst = [x, [3, 4], x]
lst.remove([1, 2])
assert lst == [[3, 4], [1, 2]]
lst = [1, [2, 3], 4]
lst.remove([2, 3])
assert lst == [1, 4]
lst = [[3], [1, 2], [4]]
assert lst.index([1, 2]) == 1
lst = [[1], [2], [1]]
assert lst.index([1]) == 0
lst = [[1, 2], [3], [1, 2], 4, [1, 2]]
assert lst.count([1, 2]) == 3
assert lst.count([3]) == 1
assert lst.count([99]) == 0
assert [].count([1]) == 0
assert [1, 2] in [[1, 2], [3, 4]]
assert [5, 6] not in [[1, 2], [3, 4]]
assert [] in [[], [1]]
a = [1, 2]
b = [3, 4]
assert [*a] == [1, 2]
assert [*a, *b] == [1, 2, 3, 4]
assert [0, *a, 5] == [0, 1, 2, 5]
assert [*[]] == []
assert [*(1, 2)] == [1, 2]
assert [*'abc'] == ['a', 'b', 'c']
assert [*{'x': 1, 'y': 2}] == ['x', 'y']
assert sorted([*{1, 2, 3}]) == [1, 2, 3]
hs = 'hel' + 'lo'
assert [*hs] == ['h', 'e', 'l', 'l', 'o']
def _make_list_unpack_closure():
_sentinel = 1
def _inner():
return _sentinel
return _inner
_list_unpack_closure = _make_list_unpack_closure()
try:
_x = [*_list_unpack_closure]
assert False, 'expected TypeError for non-iterable heap closure in list unpack'
except TypeError:
pass
a = [[1, 2, 3], [4, 5, 6]]
a[0][2] = 99
assert a[0][2] == 99
assert a == [[1, 2, 99], [4, 5, 6]]
a = [[1, 2, 3]]
a[0][2] += 1
assert a == [[1, 2, 4]]
a = [[10, 20], [30, 40]]
a[1][0] -= 5
assert a == [[10, 20], [25, 40]]
a = [[[0]]]
a[0][0][0] = 7
assert a[0][0][0] == 7
a = [[[10]]]
a[0][0][0] += 1
assert a[0][0][0] == 11
d = {'k': [1, 2, 3]}
d['k'][0] = 100
assert d['k'] == [100, 2, 3]
d = {'k': [1, 2, 3]}
d['k'][0] += 100
assert d['k'] == [101, 2, 3]
d = {'a': {'x': 1, 'y': 2}}
d['a']['y'] = 42
assert d['a']['y'] == 42
d = {'a': {'x': 1}}
d['a']['x'] += 10
assert d['a']['x'] == 11
_eval_log = []
def _tracking_obj():
_eval_log.append('obj')
return [10, 20, 30]
def _tracking_index():
_eval_log.append('idx')
return 1
_tracking_obj()[_tracking_index()] += 100
assert _eval_log == ['obj', 'idx'], f'eval-once order: {_eval_log}'
_result_list = [10, 20, 30]
_eval_log.clear()
def _tracking_obj2():
_eval_log.append('obj')
return _result_list
def _tracking_index2():
_eval_log.append('idx')
return 2
_tracking_obj2()[_tracking_index2()] += 7
assert _eval_log == ['obj', 'idx'], f'eval-once order with persistent list: {_eval_log}'
assert _result_list == [10, 20, 37], f'augmented assign via function: {_result_list}'
lst_in = [1, 'two', 3]
assert 1 in lst_in
assert 'two' in lst_in
assert 9 not in lst_in
assert [2, 3] in [1, [2, 3]]
assert [2, 4] not in [1, [2, 3]]
assert True in [1, 2]
assert 1.0 in [1, 2]
assert (2, 3) in [1, (2, 3)]
assert None in [None]
assert 1 not in []