邮编和邮编最长

时间:2019-11-30 19:59:51

标签: python

我正在尝试使用zip()itertools.zip_longest()函数。我需要帮助来了解他们,并可能解决我遇到的错误。使用zip()可以运行代码,但不会获得其中一个列表中的所有条目。使用itertools.zip_longest()时出现错误,无法解决。

这是我的代码(通过Google Colab运行):

!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Input.txt
!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Labels.txt
!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Input_Train.txt
!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Labels_Train.txt
!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Input_Valid.txt
!wget https://raw.githubusercontent.com/muriloasouza/Deep-Learning/master/Labels_Valid.txt

batch_size = 3
df_input_train=pd.read_csv('./Input_Train.txt',usecols =['Wind_MWh','Actual_Load_MWh'],chunksize = 24*batch_size, iterator=True)
df_target_train=pd.read_csv('./Labels_Train.txt',usecols =['Potencia_Media_do_Vento_(MW)','Desvio_Padrao_Vento_(MW)','FCSPV_(Fracao_de_Carga_Suprida_pela_Potencia_do_Vento)'],chunksize = batch_size, iterator=True)
df_input_valid=pd.read_csv('./Input_Valid.txt',usecols =['Wind_MWh','Actual_Load_MWh'],chunksize = 24*batch_size, iterator=True)
df_target_valid=pd.read_csv('./Labels_Valid.txt',usecols =['Potencia_Media_do_Vento_(MW)','Desvio_Padrao_Vento_(MW)','FCSPV_(Fracao_de_Carga_Suprida_pela_Potencia_do_Vento)'],chunksize = batch_size, iterator=True)
c= 0 
for chunk, chunk2, chunk3, chunk4 in itertools.zip_longest(df_input_train,df_target_train,df_input_valid,df_target_valid):
  c = c+1
  X_train = chunk.values
  X_valid = chunk3.values
  X_train = np.resize(X_train,(batch_size,24,2,1))
  X_valid = np.resize(X_valid,(batch_size,24,2,1))
  Y_train = chunk2.values
  Y_valid = chunk4.values
print(X_train)
print(c)

错误:

     17   c = c+1
     18   X_train = chunk.values
---> 19   X_valid = chunk3.values
     20   X_train = np.resize(X_train,(batch_size,24,2,1))
     21   X_valid = np.resize(X_valid,(batch_size,24,2,1))

AttributeError: 'NoneType' object has no attribute 'values'

1: zip()遍历所传递的最小列表(这就是它缺少其中一个列表中某些条目的原因)吗?

2: zip_longest()遍历较大的那个吗?

3:为什么我会收到该错误?

4:我是否可以在每个列表中精确遍历整个列表的长度?

2 个答案:

答案 0 :(得分:0)

  

无论如何,我是否可以在每个列表的长度上进行迭代?

通过itertools.zip_longest文档字符串:

  

当较短的可迭代项用尽时,fillvalue被替换   在他们的位置。 fillvalue默认为“无”或可以通过以下方式指定   关键字参数。

>>> for a, b in itertools.zip_longest([1, 2, 3, 4], "abcdefghijk"):
    print(a, b)


1 a
2 b
3 c
4 d
None e
None f
None g
None h
None i
None j
None k

使用显式fillvalue

for a, b in itertools.zip_longest([1, 2, 3, 4], "abcdefghijk", fillvalue="YAY"):
    print(a, b)


1 a
2 b
3 c
4 d
YAY e
YAY f
YAY g
YAY h
YAY i
YAY j
YAY k

您必须决定缺少某项物品时应该怎么办。

答案 1 :(得分:0)

zip组合了多个迭代器。

举个简单的例子,运行:

for x in zip(range(10),range(5)):
    print(x)

由于zip以最短的迭代器结束,因此只能打印5次。

zip_longest()将遍历所有条目,并且如果其中一个迭代器用尽了,它将被None取代。

import itertools
for x in itertools.zip_longest(range(10),range(5)):
    print(x)

1。 是的,zip()会迭代最短迭代器的长度。

2。 是的,zip_longest()迭代到最长迭代器的长度。

3。 之所以会出现此错误,是因为chunk3比最长的迭代器短,因此在该迭代中,其值为None。没有一个没有values属性。

4。 现在,您正在一起迭代它们。询问您是否只能针对每个长度进行迭代并没有多大意义,因为它们的长度不同并且您正在一起迭代。您可能错过了一些值,或者有些迭代有None个值。如果不需要一起使用这些值,则可以查看itertools链之类的东西。