循环中超出范围问题

时间:2015-12-21 23:57:14

标签: python

我尝试创建一个允许遍历列表的脚本( tmpList = openFiles(cop_node))。此列表包含206个组件的5个其他子列表。 子列表的最后200个组件是字符串编号(每个组件用空格字符分隔的200个字符串编号的行)。

我需要遍历主列表并创建一个包含5个组件的新列表,每个新组件包含浮动的200 * 200值。

我的实际代码是尝试向使用相当于一个子列表的旧代码添加第二个循环。但是python返回错误"索引超出范围"

def valuesFiles(cop_node):
tmpList = openFiles(cop_node)
valueList = []
valueListStr = []*len(tmpList)
for j in range (len(tmpList)):
    tmpList = openFiles(cop_node)[j][6:]
    tmpList.reverse()
    for i in range (len(tmpList)):
        splitList = tmpList[i].split(' ')
        valueListStr[j].extend(splitList)
        #valueList.append(float(valueListStr[j][i]))
return(valueList)

2 个答案:

答案 0 :(得分:2)

如果您希望列表列表使用带范围的 list comp ,则

valueListStr = []*len(tmpList)不会按照您的想法执行操作:

valueListStr = [[] for _ in range(len(tmpList))]

这将创建一个列表列表:

In [9]: valueListStr = [] * i

In [10]: valueListStr
Out[10]: []

In [11]: valueListStr = [[] for _ in range(i)]

In [12]: valueListStr
Out[12]: [[], [], [], []]

那么为什么你会因为valueListStr[j].extend(splitList)而收到错误,你就无法索引一个空列表。

您实际上似乎没有在任何地方返回列表,因此我认为您实际上想要实际返回它,您也可以根据需要在循环内创建列表,您也可以循环遍历tmpListopenFiles(cop_node)

def valuesFiles(cop_node):
    valueListStr = []
    for j in openFiles(cop_node):
        tmpList = j[6:]
        tmpList.reverse()
        tmp = []
        for s in tmpList:
            tmp.extend(s.split(' '))
        valueListStr.append(tmp)
    return valueListStr

使用itertools.chain可以成为:

from itertools import chain
def values_files(cop_node):
    return  [list(chain(*(s.split(' ') for s in  reversed(sub[6:])))) 
             for  sub in openFiles(cop_node)]

答案 1 :(得分:0)

  for (Activity singleActivity : activities)
    if(singleActivity.violationType == "Warning"){
      warningCount++;
      println("is it working?");
    }

经过一些修改后,我将其作为例外工作:

  <RelativeLayout xmlns:android "http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <include
    android:id="@+id/toolbar_actionbar"
    layout="@layout/mtoolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar_actionbar">

<fragment
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="com.example.rohit.newmastervocab.FloatingFragment"
    android:id="@+id/fragment2"
    android:layout_alignParentStart="true"
    tools:layout="@layout/fragmentfloating"
    android:layout_alignTop="@+id/drawer"
    android:layout_gravity="center_horizontal|bottom" /> 
</FrameLayout>
<android.support.v4.widget.DrawerLayout android:id="@+id/drawer1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:layout_below="@+id/toolbar_actionbar"
    android:layout_alignParentBottom="true">
    <ListView
        android:id="@+id/drawerlist1"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:entries="@array/navigation_items"
        android:background="#F3F6C8"
        android:layout_gravity="start">

    </ListView>
  </android.support.v4.widget.DrawerLayout>


</RelativeLayout>

我不明白为什么,但第一个循环语句不起作用。最后,我有空列表,如:[[],[],[],[],[]]。这就是我改变开头的原因。最后我将字符串转换为浮点数。