根据某列中的值添加0或1

时间:2016-05-12 08:17:20

标签: python append iteration

我希望有人可以帮助我以下内容。我有一个名单:' List'。我有一个名为X的列表。 现在我想检查List中每行第三列中的值是否小于(<)X或等于/大于X.如果值较小,我想在第6列添加0并且如果等于/大于1则为1。对于每个X,我希望将答案添加到列表的上一列。所以在这种情况下有4个X值。因此,结果应该将4列添加到List。我的下面的代码可能表明我很不成熟,我希望你能帮助我。提前谢谢。

List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)]
X= [1,4,5,6]


    for item in X:
        for number in row[3] for row in List:
            count = 0
            if number < item:
                List[5+count].append(0)
                count += 1
                return List
            else:
                List[5+count].append(1)
                count += 1              
                return List
       return List

6 个答案:

答案 0 :(得分:2)

首先,您应该知道tuples(括号括起的列表)是不可变的,因此一旦定义它们就无法改变它们。在您的案例中使用list更好(由[]括起来。)

List = [[3,5,6,7,6],[3,5,3,2,6],[3,6,1,0,5]]
X= [1,4,5,6]

for item in X: # loop on elements of X
    for subList in List: # loop on 'rows' in List
        if subList[2] < item: # test if 3rd element is smaller than item in X
            subList.append(0); # push 0 to the end of the row
        else:
            subList.append(1); # push 1 to the end of the row

答案 1 :(得分:1)

  1. 您的缩进是关闭的(您应该从wp_create_user声明开始取消所有内容。

  2. 您不能forappendtuples变量中的实际上是List)。

  3. 由于您不在函数中,tuples不执行任何操作。

  4. 由于索引从0开始,因此您应该将return用于第3行。

  5. row[2]中的元素数量多于X中的行数。

  6. 话虽如此,您也可以使用列表推导来实现这一点。这是一个做同样事情的单行:

    List

    将打印

    >>> List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)]
    >>> X = [1,4,5,6]
    >>> print [tuple(list(t[0])+[0]) if t[0][2] < t[1] else tuple(list(t[0]) + [1]) for t in zip(List, X)]
    

答案 2 :(得分:1)

List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)]
X= [1,4,5,6]

scores = []
for item in List:
   scores.append(tuple(map(lambda x: 0 if item[2] < x else 1, X)))

result = []
for item, score in zip(List, scores):
    result.append(item + score)

print(result)
# [(3, 5, 6, 7, 6, 1, 1, 1, 1), (3, 5, 3, 2, 6, 1, 0, 0, 0), (3, 6, 1, 0, 5, 1, 0, 0, 0)]

答案 3 :(得分:1)

List = [[3,5,6,7,6],[3,5,3,2,6],[3,6,1,0,5]]
X= [1,4,5,6]
elems = [row[3] for row in List]
for i in range(len(elems)):
    for x in X:
    if elems[i] < x:
        List[i].append(0)
    else:
        List[i].append(1)
print List

如果您不使用函数,则无法使用return。

答案 4 :(得分:0)

  

同意塞尔丘克

     

[编辑#1:谢谢@Rawing,我输错了&gt; as&lt;]

以下简化了AlmostGr的版本: -

List = [[3, 5, 6, 7, 6], [3, 5, 3, 2, 6], [3, 6, 1, 0, 5]]
X = [1, 4, 5, 6]

for num in X:
    for item in List:
        if num > item[2]:
            item.append(0)
        else:
            item.append(1)

它运行X中的所有元素并产生输出:

[[3, 5, 6, 7, 6, 1, 1, 1, 1], [3, 5, 3, 2, 6, 1, 0, 0, 0], [3, 6, 1, 0, 5, 1, 0, 0, 0]]

答案 5 :(得分:0)

需要从函数内部调用

return。它退出函数,return指定的值返回给函数。 所以你不能在你的程序中使用它。

在列表中,每一行实际上都称为元组。元组没有append函数,因此您无法使用它添加到行的末尾。

此外,您不能在一行中有两个for循环。 (这不是问题,因为我们只需要一个来实现你的输出)

我修改了你的代码,使它看起来很相似,所以你更容易理解。

List = [(3,5,6,7,6),(3,5,3,2,6),(3,6,1,0,5)]
X= [1,4,5,6]

for item in X:
    n = 0
    for row in list:
        if row[3] < item:
            list[n] = list[n] + (0,)
        else:
            list[n] = list[n] + (1,)
        n = n+1

print List

你需要添加(0,)或(1,)以表明它是一个元组添加。 (否则python会认为你正在添加一个带整数的元组)