Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将部分说明留空,以便python完成_Python_List_If Statement_Generalization - Fatal编程技术网

将部分说明留空,以便python完成

将部分说明留空,以便python完成,python,list,if-statement,generalization,Python,List,If Statement,Generalization,我是Python新手,所以我不知道这是否可行,但我的猜测是肯定的。我想迭代一个列表,并根据它们的值将项目放入新的列表中。例如,如果item\ux==4,我想把它放在一个名为list\u的列表中,用于\u4。我的列表中的所有其他项目和数字0到10也是如此。因此,是否有可能以这样一种方式概括一条语句:如果项x==*某个值*,它将被附加到列表中以获得某个值*? 谢谢 是否可以使用列表理解和if语句 比如: 并将其与dict.相结合,而不是试图生成动态变量。使用字典结构的地图可能会对您有所帮助 例如:

我是Python新手,所以我不知道这是否可行,但我的猜测是肯定的。我想迭代一个列表,并根据它们的值将项目放入新的列表中。例如,如果
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]