我目前正在学习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
)?
答案 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.')