在python中将列表列表加入单个列表(或迭代器)的简短语法是什么?
例如,我有一个如下列表,我想迭代a,b和c.
x = [["a","b"], ["c"]]
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是如下.
result = []
[ result.extend(el) for el in x]
for el in result:
print el
Run Code Online (Sandbox Code Playgroud) 想想我正在调用它的副作用的函数,而不是返回值(比如打印到屏幕,更新GUI,打印到文件等).
def fun_with_side_effects(x):
...side effects...
return y
Run Code Online (Sandbox Code Playgroud)
现在,是Pythonic使用列表推导来调用这个函数:
[fun_with_side_effects(x) for x in y if (...conditions...)]
Run Code Online (Sandbox Code Playgroud)
请注意,我不会将列表保存在任何位置
或者我应该像这样调用这个函数:
for x in y:
if (...conditions...):
fun_with_side_effects(x)
Run Code Online (Sandbox Code Playgroud)
哪个更好?为什么?
映射不调用正在传递的函数.
class a:
def getDateTimeStat(self,datetimeObj):
print("Hello")
if __name__ == "__main__":
obj = a()
print("prog started")
data = [1,2,3,4,5]
b = list(map(obj.getDateTimeStat,data))
Run Code Online (Sandbox Code Playgroud)
在新行上预期的操作:Hello Hello Hello Hello Hello
任何帮助将不胜感激....
考虑到可扩展性和可读性,其中哪一个被认为是更加pythonic?使用enumerate:
group = ['A','B','C']
tag = ['a','b','c']
for idx, x in enumerate(group):
print(x, tag[idx])
Run Code Online (Sandbox Code Playgroud)
或使用zip:
for x, y in zip(group, tag):
print(x, y)
Run Code Online (Sandbox Code Playgroud)
我问的原因是我一直在混合两者.我应该遵循一种标准方法,但它应该是什么?