这个断言语句测试的是什么类型的数据结构?
What type of data structure is this assert statement testing for?
我无法使以下断言语句起作用:
assert(data[5] == {
'tone': ['line', 'five', 'Test', 'one', '.'],
'ttwo': ['line', 'five', 'Test', 'two', '.'],
'tline': [3]
})
我的理解是,它正在测试每个列表("tone"、"ttwo"和"tline")中第5位索引的数据,但是"data" 意思是字典?它有大括号,但是,如果它是一个字典,它会生成 "tone"、"ttwo" 和 "tline" 键,而不是列表,这对我来说没有意义。
或者,data
是一个包含更多列表(tone
、ttwo
和 tline
)的列表,这些列表本身包含更多的字符串或数字列表?
我认为我拥有 tone
、ttwo
和 tline
的正确格式的数据(见下文);我只是想不通如何将它们放入 "data" 以使此断言语句起作用。
tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = 3
我已经尝试用我知道的所有方法解决这个问题(将 data
设置为 list/tuple/dictionary),但我没有成功。我看过了,但我找不到相同类型的数据结构或断言语句的类似问题。
如果 data[5]
是任何东西,那么 data
可能是一个列表(或其他一些序列,如元组,甚至是字典或其他碰巧以整数作为键的映射——但是无论如何,您可以 给它 一个列表,此代码将接受它)。
同时,如果将 data[5]
与带有 ==
的字典进行比较,则几乎可以肯定它是一个字典。因此,data
不仅仅是任何列表,而是第 5 个元素是字典的列表。我们不知道前 5 个元素(或超过 5 个的任何元素)可能是什么,但由于断言不检查它们,我们可以放任何我们想要的东西。
至于那个 data[5]
字典的成员——好吧,你几乎是对的。它们都是列表——两个字符串列表和一个整数列表——但请注意你写了 tline = 3
。一个 int 的列表与那个 int 的值不同;你需要这份清单。
所以,让我们构建它 inside-out:
tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = [3]
data5 = {'tone': tone, 'ttwo': ttwo, 'tline': tline}
data = [data5 for _ in range(6)]
现在,它会过去的。
你的理解有点偏差。 assert
检查 data
的第 6 个元素是否是具有这些值的目录。传递此语句的数据赋值可能如下所示:
data = [0, 1, 2, 3, 4,
{
'tone': tone,
'ttwo': ttwo,
'tline': tline}]
现在断言通过了。
data[5]
是一个包含键 "tone"
、"ttwo"
和 "tline"
的字典。与每个键关联的值是一个列表。
data
本身可以是列表或字典——或任何其他接受整数键的数据结构(data[5]
并不明确表明 data
必须是任何特定类型)——但它是可能一个列表。
你可以写一个 data
来通过测试:
data = [None, None, None, None, None,
{'tone': ['line', 'five', 'Test', 'one', '.'],
'ttwo': ['line', 'five', 'Test', 'two', '.'],
'tline': [3]}]
我无法使以下断言语句起作用:
assert(data[5] == {
'tone': ['line', 'five', 'Test', 'one', '.'],
'ttwo': ['line', 'five', 'Test', 'two', '.'],
'tline': [3]
})
我的理解是,它正在测试每个列表("tone"、"ttwo"和"tline")中第5位索引的数据,但是"data" 意思是字典?它有大括号,但是,如果它是一个字典,它会生成 "tone"、"ttwo" 和 "tline" 键,而不是列表,这对我来说没有意义。
或者,data
是一个包含更多列表(tone
、ttwo
和 tline
)的列表,这些列表本身包含更多的字符串或数字列表?
我认为我拥有 tone
、ttwo
和 tline
的正确格式的数据(见下文);我只是想不通如何将它们放入 "data" 以使此断言语句起作用。
tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = 3
我已经尝试用我知道的所有方法解决这个问题(将 data
设置为 list/tuple/dictionary),但我没有成功。我看过了,但我找不到相同类型的数据结构或断言语句的类似问题。
如果 data[5]
是任何东西,那么 data
可能是一个列表(或其他一些序列,如元组,甚至是字典或其他碰巧以整数作为键的映射——但是无论如何,您可以 给它 一个列表,此代码将接受它)。
同时,如果将 data[5]
与带有 ==
的字典进行比较,则几乎可以肯定它是一个字典。因此,data
不仅仅是任何列表,而是第 5 个元素是字典的列表。我们不知道前 5 个元素(或超过 5 个的任何元素)可能是什么,但由于断言不检查它们,我们可以放任何我们想要的东西。
至于那个 data[5]
字典的成员——好吧,你几乎是对的。它们都是列表——两个字符串列表和一个整数列表——但请注意你写了 tline = 3
。一个 int 的列表与那个 int 的值不同;你需要这份清单。
所以,让我们构建它 inside-out:
tone = ['line', 'five', 'Test', 'one', '.']
ttwo = ['line', 'five', 'Test', 'two', '.']
tline = [3]
data5 = {'tone': tone, 'ttwo': ttwo, 'tline': tline}
data = [data5 for _ in range(6)]
现在,它会过去的。
你的理解有点偏差。 assert
检查 data
的第 6 个元素是否是具有这些值的目录。传递此语句的数据赋值可能如下所示:
data = [0, 1, 2, 3, 4,
{
'tone': tone,
'ttwo': ttwo,
'tline': tline}]
现在断言通过了。
data[5]
是一个包含键 "tone"
、"ttwo"
和 "tline"
的字典。与每个键关联的值是一个列表。
data
本身可以是列表或字典——或任何其他接受整数键的数据结构(data[5]
并不明确表明 data
必须是任何特定类型)——但它是可能一个列表。
你可以写一个 data
来通过测试:
data = [None, None, None, None, None,
{'tone': ['line', 'five', 'Test', 'one', '.'],
'ttwo': ['line', 'five', 'Test', 'two', '.'],
'tline': [3]}]