s[i:j:t] = t (1) t must have the same length as the slice it is replacing.
Why? >>> def foo(): ... while True: ... yield 'a' ... >>> foo() >>> x = range(10) >>> x[::2] = foo() This is infinite loop due to Python building a sequence out of the iterator to check its length. I think it might be more useful for x[::2] = foo() to result in an x of ['a', 1, 'a', 3, 'a', 5, 'a', 7, 'a', 9] In other words, take (j-i)//k elements from t for abs(k) != 1. A problem, though, arises when t is too short--the sequence could be corrupted before an exception is thrown if you omit the length check. So you'd also have to define x[::2] = 'aaa' as resulting in ['a', 1, 'a', 2, 'a', 3, 5, 7, 9] But perhaps that's just adding more useless complexity to the already complex slicing rules (kudos for 'slice.indices', though curses that the method isn't cross-referenced in more places). -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list