在循环期间为数组赋值 - Python

时间:2017-02-19 17:09:42

标签: python arrays loops indexing

我目前正在学习Python(我在Matlab中有很强的背景)。我想在Python中编写一个循环,其中数组的大小随着每次迭代而增加(即,我可以将新计算的值分配给变量的不同索引)。为了这个问题,我使用一个非常简单的循环来生成向量t = [1 2 3 4 5]。在Matlab中,编程我想要的循环看起来像这样:

t = [];
for i = 1:5
    t(i,1) = i;
end

我已经设法使用以下代码在Python中实现了相同的功能:

result_t = []
for i in range(1,5):
    t = i
    result_t.append(t)

当我们在Python中迭代时,是否有更有效的方法为数组赋值?为什么不可能t[i,1] = i(错误:列表索引必须是整数或切片,而不是元组)或t.append(t) = t(错误:' int'对象有没有属性'追加')?

最后,为了简单起见,我使用了上面的例子。我知道如果我想在Python中生成vector [1 2 3 4 5],我可以使用函数" np.arange(1,5,1)"

预先感谢您的协助!

- >我的真正意图不是产生向量[1 2 3 4 5],而是将计算值分配给向量变量的索引。例如:

result_b = []
b = 2
for i in range(1,5):
    t = i + b*t
    result_b.append(t) 

为什么我不能直接写t.append(t)或使用索引(即t[i] = i + b*t)?

2 个答案:

答案 0 :(得分:5)

使用append()循环时追加元素是正确的,它是Python lists中的内置方法。

但是你可以得到相同的结果:

使用列表理解:

result_t = [k for k in range(1,6)]
print(result_t)
>>> [1, 2, 3, 4, 5]

使用+运营商:

result_t = []
for k in range(1,6):
    result_t += [k]

print(result_t)
>>> [1, 2, 3, 4, 5]

使用特殊方法__iadd__

result_t = []
for k in range(1,6):
    result_t.__iadd__([k])

print(result_t)
>>> [1, 2, 3, 4, 5]

答案 1 :(得分:0)

来自使用 selenium 的 UI 测试的更好示例。

print('Assert Pagination buttons displayed?')
all_spans = self.web_driver.find_elements_by_tag_name('span')

# Identify the button texts
pagination_buttons = ["Previous Page", "Next Page", "First Page"]

# Filter from all spans, only the required ones.
filtered_spans = [s for s in all_spans if s.text in pagination_buttons]

# From the filtered spans, assert all for is_displayed()
for a_span in filtered_spans:
    assert a_span.is_displayed()
    
print('Asserted Pagination buttons displayed.')