Цикл for и понимание списка не эквивалентны.
Представьте, что у нас есть:
>>> def sort(a, _): return 2*a
...
>>> i=0
Тогда:
>>> ans=list(range(5))
>>> ans = [sort(a, i + 1) for a in ans]
>>> ans
[0, 2, 4, 6, 8]
Но:
>>> ans=list(range(5))
>>> for a in ans: ans=(sort(a, i+1))
>>> ans
8
Понимание списка в основном:
sort(a, i+1)
к каждому a
в ans
ans
. Как сказал @chepner в комментарии, здесь нет рекурсии [1] sup>. Это эквивалентно:
>>> ans=list(range(5))
>>> new_ans = [sort(a, i + 1) for a in ans]
>>> ans = new_ans
>>> new_ans
[0, 2, 4, 6, 8]
В то время как цикл for:
ans
: sort(a, i+1)
для ans
для каждого [ 1114] Следовательно, задания дают: Эквивалентный цикл вашего понимания списка: [1] sup> Функция может использовать рекурсию, но я не уверен, что рекурсия будет означать для понимания списка, если вы не используете грязный хак: для записи https://stackoverflow.com/a/221874/6914441 . [2] sup> Обратите внимание, что переназначение переменной Было бы иначе, если вы измените список изнутри тела цикла ( настоятельно не рекомендуется ): Мы удаляем первый элемент для каждой итерации, но Индекс продолжает расти: ans = sort(ans[0], i+1)
, затем ans = sort(ans[1], i+1)
, ..., ans = sort(ans[-1], i+1)
где ans[-1]
- последний элемент оригинала ans
2 SUP>. [+1136] >>> ans=list(range(5))
>>> new_ans=[]
>>> for a in ans: new_ans.append(sort(a, i+1))
>>> ans = new_ans # assignement here
>>> ans
[0, 2, 4, 6, 8]
ans
не изменяет исходный список: ans
подвергается воздействию, цикл for все еще имеет ссылку в исходном списке. >>> xs=list(range(5))
>>> for x in xs: print(x, xs);_=xs.pop(0)
...
0 [0, 1, 2, 3, 4]
2 [1, 2, 3, 4]
4 [2, 3, 4]
[*0*, 1, 2, 3, 4] # then pop 0
[1, *2*, 3, 4] # then pop 1
[2, 3, *4*] # then pop 2
SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'
Затем проанализируйте это значение с Reg Exp (это легко), который мог взгляды, подобные этому: [(.*?)]
Кроме того, можно использовать:
PRAGMA table_info(table_name)