如何打印列表的值?

时间:2018-08-30 19:29:21

标签: python

我有一个python问题:

假设给定一个向量x,其中包含大多数为零的实数值。例如:

x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]

完成函数compress_vector(x),以返回带有两个键dd['inds']的字典d['vals'],这两个键指示所有位置和值x的非零条目。对于上一个示例,

d['inds'] = [1, 5, 6, 9]
d['vals'] = [0.87, 0.32, 0.46, 0.10]

注意1.您的实现不得修改输入向量x

注2。如果x仅包含零个条目,则d['inds']d['vals']应该为空列表。

我能够打印索引,但是我不确定如何打印值。

def compress_vector(x):
    assert type(x) is list
    d = {'inds': [], 'vals': []}

    d = ([i for i, e in enumerate(x) if e != 0], )
    return d

6 个答案:

答案 0 :(得分:3)

您可以按以下方式定义此功能:

def compress_vector(x):
    d = {'inds': [], 'vals': []}

    for i, e in enumerate(x):
        if e != 0:
            d['inds'].append(i)
            d['vals'].append(e)
    return d

基本上,您创建一个dict,其中'inds''vals'的值被初始化为空列表。然后,使用enumerate遍历列表,以获取索引(i)和元素(e)。在循环内部,您将元素设置为非零的条件,并将ie附加到先前的列表中。

答案 1 :(得分:2)

您非常亲密。让我们看一下代码的一部分:

i, e in enumerate(x)

此处e是列表x中的值,而i是索引。因此,您可以将列表理解修改为

[e for i, e in enumerate(x) if e != 0]
 ^

请注意,由于这不需要索引,因此您可以摆脱enumerate()调用:

[e for e in x if e != 0]

您仍然需要进行一些修改,以将两个列表存储到字典中。

答案 2 :(得分:1)

从枚举的x中过滤出零,然后使用dict-comprehension从每个元组中提取两个元素。

def compress_vector(x):
    enumed = [(i,n) for i,n in enumerate(x) if n]
    return {k:[e[i] for e in enumed] for i,k in enumerate(('inds','vals'))}

和测试:

>>> compress_vector(x)
{'inds': [1, 5, 6, 9], 'vals': [0.87, 0.32, 0.46, 0.1]}

答案 3 :(得分:0)

这对我有用。

x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]

def compress_vector(x):
    d = {'inds': [], 'vals': []}
    for i, val in enumerate(x):
        if val != 0.0:
            d['inds'].append(i)
            d['vals'].append(val)

    return d

d = compress_vector(x)

答案 4 :(得分:0)

您在这里所做的是将一个元组对象分配给字典对象。注意:

d = ([i for i, e in enumerate(x) if e != 0], )

列表理解的大括号使其成为一个元组。因此,您无法d拥有此必需的表示形式:

d['inds'] = [1, 5, 6, 9]
d['vals'] = [0.87, 0.32, 0.46, 0.10]

您必须将满足条件的值明确附加到列表中。

def compress_vector(x):
    d = dict()
    d['inds'] = []
    d['vals'] = []
    for i, e in enumerate(x):
        if e != 0:
            d['inds'].append(i)
            d['vals'].append(e)
    return d

如果没有非零值,则不会将它们附加到列表中,您将获得一个包含空列表的字典。

答案 5 :(得分:0)

解决方案

x = [0.0, 0.87, 0.0, 0.0, 0.0, 0.32, 0.46, 0.0, 0.0, 0.10, 0.0, 0.0]
d = {"inds" : [], "vals" : []}

for i in range(len(x)):
    if x[i] != 0:
        d["inds"].append(i)
        d["vals"].append(x[i])

for k, v in d.items():
        print(str(k) + ": " + str(v))

输出

(xenial)vash@localhost:~/pcc/12/alien_invasion_2$ python3 help_print_value_list.py 
vals: [0.87, 0.32, 0.46, 0.1]
inds: [1, 5, 6, 9]
(xenial)vash@localhost:~/pcc/12/alien_invasion_2$

评论

只是创建了一些带有条件的循环,如果您有问题,请发表评论。

如果需要的话,这段代码还将帮助您将“ inds”与“ vals”进行匹配,您可以随意操作它,但可以通过以下方式获得想法:

for i in range(len(d["inds"])):
    print(str(d["inds"][i]) + ": " + str(d["vals"][i]))

这将输出:

(xenial)vash@localhost:~/pcc/12/alien_invasion_2$ python3 something.py 
1: 0.87
5: 0.32
6: 0.46
9: 0.1
(xenial)vash@localhost:~/pcc/12/alien_invasion_2$