将部分说明留空,以便python完成
我是Python新手,所以我不知道这是否可行,但我的猜测是肯定的。我想迭代一个列表,并根据它们的值将项目放入新的列表中。例如,如果将部分说明留空,以便python完成,python,list,if-statement,generalization,Python,List,If Statement,Generalization,我是Python新手,所以我不知道这是否可行,但我的猜测是肯定的。我想迭代一个列表,并根据它们的值将项目放入新的列表中。例如,如果item\ux==4,我想把它放在一个名为list\u的列表中,用于\u4。我的列表中的所有其他项目和数字0到10也是如此。因此,是否有可能以这样一种方式概括一条语句:如果项x==*某个值*,它将被附加到列表中以获得某个值*? 谢谢 是否可以使用列表理解和if语句 比如: 并将其与dict.相结合,而不是试图生成动态变量。使用字典结构的地图可能会对您有所帮助 例如:
item\ux==4
,我想把它放在一个名为list\u的列表中,用于\u4
。我的列表中的所有其他项目和数字0到10也是如此。因此,是否有可能以这样一种方式概括一条语句:如果项x==*某个值*
,它将被附加到列表中以获得某个值*
?
谢谢 是否可以使用列表理解和if语句 比如:
并将其与dict.相结合,而不是试图生成动态变量。使用字典结构的地图可能会对您有所帮助 例如:
from collections import defaultdict
item_list = [1, 2, 3, 9, 2, 2, 3, 4, 4]
# Use a dictionary which elements are a list by default:
items_map = defaultdict(list)
for i in item_list:
items_map['list_for_{}'.format(i)].append(i)
print(items_map)
# Test the map for elements in the list:
if 'list_for_4' in items_map:
print(items_map['list_for_4'])
else:
print('`list_for_4` not found.')
或者,如果您只需要列表中某项出现的次数,则可以使用以下方法对其进行聚合:
通过简单的列表迭代:
lst_for_1 = []
lst_for_2 = []
lst_for_3 = []
d = {1: lst_for_1, 2: lst_for_2, 3: lst_for_3}
for x in lst:
d[x].append(x)
或者,如果需要比x的值更复杂的条件,请定义一个函数:
def f(x):
if some condition...:
return lst_for_1
elif some other condition:
return lst_for_2
else:
return lst_for_3
然后用f(x)替换d[x]。追加(x)
。追加(x)
如果您不想自己进行迭代,也可以使用map:
list(map(lambda x: d[x].append(x),lst))
或
带有map的版本将返回一个您不关心的
Nones
列表<代码>映射(…)返回一个迭代器,只要您不遍历它(例如,将其结果转换为列表),它就不会执行映射。这就是为什么您需要列表(map(…)
,它将创建一个虚拟列表,但会在途中将lst
的项目附加到正确的列表中,这正是您想要的。不知道为什么要这样做。但你可以做到
data = [1, 2, 3, 4, 1, 2, 3, 5]
for item in data:
name = f'list_for_{item}'
if name in globals():
globals()[name].append(item)
else:
globals()[name] = [item]
你为什么要这样做,而不是,比如说,使用一个
dict
。。。
list(map(lambda x: d[x].append(x),lst))
list(map(lambda x: f(x).append(x),lst))
data = [1, 2, 3, 4, 1, 2, 3, 5]
for item in data:
name = f'list_for_{item}'
if name in globals():
globals()[name].append(item)
else:
globals()[name] = [item]