Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 - Fatal编程技术网

Python 如何根据条件将列表中的项替换为基于另一个相同长度的嵌套列表的空字符串

Python 如何根据条件将列表中的项替换为基于另一个相同长度的嵌套列表的空字符串,python,list,Python,List,我有一个标题列表如下: h_list = ['h1','h2','h3','h4','h5'] 现在我有了数据列表(嵌套): 两个列表每次都具有相同的长度,因此我希望在相同索引位置的嵌套列表的每个列表中进行匹配,如果其所有对应值都是None或',则将h_list中的项替换为'(空字符串) 我的预期产出是: h_list = ['h1',' ','h3',' ','h5'] 我相信这应该适用于您的示例: new_list = [] for orig_element, *values in zi

我有一个标题列表如下:

h_list = ['h1','h2','h3','h4','h5']
现在我有了数据列表(嵌套):

两个列表每次都具有相同的长度,因此我希望在相同索引位置的嵌套列表的每个列表中进行匹配,如果其所有对应值都是
None
'
,则将
h_list
中的项替换为
'
(空字符串)

我的预期产出是:

h_list = ['h1',' ','h3',' ','h5']

我相信这应该适用于您的示例:

new_list = []
for orig_element, *values in zip(h_list, *d_list):
    new_list.append(orig_element if any(not (v is None or str(v).strip() == '') for v in values) else '')
如果要就地修改列表,只需执行以下操作:

for i, (orig_element, *values) in enumerate(h_list, *d_list):
    h_list[i] = orig_element if any(not (v is None or str(v).strip() == '') for v in values) else ''
基本解决方案


尝试列表理解:

h_list = ['h1','h2','h3','h4','h5']


d_list = [
[1, None, 3, ' ', 5],
[1, ' ', 2, ' ', 9]
]

empty = [' ', None]
h_list = [' ' if any(b[i] in empty for b in d_list) else v for i, v in enumerate(h_list)]
print(h_list)
输出:

['h1', ' ', 'h3', ' ', 'h5']
['h1', ' ', 'h3', ' ', 'h5']

分解这部分代码:

h_list = [' ' if any(b[i] in empty for b in d_list) else v for i, v in enumerate(h_list)]
首先,让我们只有

[(i, v) for i, v in enumerate(h_list)]
以上是
h\u列表
中每个元素的索引和值列表

现在,我们使用
if
语句来确定何时添加
'
。首先,我们需要认识到这一功能:

any(b[i] in empty for b in d_list)
如果索引
i
处的
du列表中的任何数组在
空列表中,则返回
True
。我们希望
None
'
h_list
中的所有字符串就位,其索引为
d_list
中的任何列表返回
'
None
,因此:

[' ' for i, v in enumerate(h_list) if any(b[i] in empty for b in d_list)]
最后,如果没有
any,我们希望使用原始字符串(d_列表中b的b[i]为空)
。为此,我们使用
else
语句(请注意,使用
else
,语句会被移动到
循环的左侧):


您可以将
zip
all
一起使用:

h_list = ['h1','h2','h3','h4','h5']
d_list = [[1, None, 3, ' ', 5], [1, ' ', 2, ' ', 9]]
r = [' ' if all(k in {None, ' '} for k in j) else a for a, j in zip(h_list, zip(*d_list))]
输出:

['h1', ' ', 'h3', ' ', 'h5']
['h1', ' ', 'h3', ' ', 'h5']

OP只指定了
'
None
,因此结果列表中可能仍应保留不同的字符串。@AnnZen是的,如果他们能够理解我编写的简单循环,他们可以更改代码并使其适应他们的需要。虽然我要提醒你,用户可能会否决某篇文章的原因,但我并不认为这篇文章应该被否决。
['h1', ' ', 'h3', ' ', 'h5']