>>545 を抽象化+10桁チェック+isasciiチェック追加(10桁チェックは不要だとは思うけども・・)
[i[:10] for i in url.split("/dp/")[1:] or url.split("pd_rd_i=")[1:] if len(i[:10])==10 and i[:10].isascii()]
気づいたんですけどこのisascii()でのチェックはasciiのチェックであって、ascii文字のチェックじゃないから
英数字だけじゃなくて/やtabやらもTrue判定しちゃいますからダメですね

ちなみに>>521も10桁チェックは入っていないのですが、入れた場合は以下のようになりまして
その場合もやはり分かりやすい、可読性が良い、簡潔、何をしているかすぐ分かる
正規表現スキになっちゃったって方はgoodボタン押してください^^
re.search(r'(?<=/dp/)(\w{10})|(?<=\?pd_rd_i=)(\w{10})|$', url).group()