<p>取决于该列表成对出现的频率</p>
<p>如果频繁-尝试-除非</p>
<pre><code>def try_except_method():
for arg, item in args_list:
try:
for i in item: # assuming item is following sequence protocol.
do_something(arg, i)
except TypeError: # asking for forgiveness.
do_something(arg, item)
</code></pre>
<p>在每次迭代中,这将比测试条件运行得更快</p>
<p>如果不是,则使用“isinstance”检查条件,就像其他答案一样</p>
<pre><code>def is_instance_method():
for arg, item in args_list:
if isinstance(item, list):
for i in item:
do_something(arg, i)
else:
do_something(arg, item)
</code></pre>
<p>如果您计划使用除列表和str以外的更多类型,则可获得额外奖励-
选择“单发”</p>
<pre><code>@singledispatch # all types other than registers goes here.
def func(a, b):
do_something(a, b)
@func.register(list) # only list type goes here.
def func_list(a, b):
for i in b:
do_something(a, i)
def single_dispatched():
for arg, item in args_list:
func(arg, item)
</code></pre>
<p>每个方法所用时间的结果与示例一起。
试着用不同的数据处理它们,这里是<a href="https://pastebin.com/nVtX7iYH" rel="noreferrer">full code</a></p>
<blockquote>
<p>0.0021587999999999052<br/>
0.0009472000000001479<br/>
0.0024591000000000474</p>
</blockquote>