从列表矩阵中删除列表-Python

时间:2020-02-20 11:04:02

标签: python list

我用ID /里程表/日期创建了排序矩阵。我真的需要删除所有列表,其中第二个位置为0值。 我准备了一个函数和循环,但不幸的是我仍然低于错误。我怀疑del []方法是否正确使用?

zero_clear中,如果tablica [i] [1] == 0:****

tablica = [
            [ 
            [21091705,  0,'30.06.2019'],
            [21091705,  0,'29.06.2019'],
            [21091705,  653842,'29.06.2019'],
            [21091705,  641701,'28.06.2019'],
            [21091705,  642000,'27.06.2019'],
            [21091705,  0,'25.06.2019'],
            [21091705,  642030,'25.06.2019'],
            [21091705,  642030,'25.06.2019'],
            [21091705,  637030,'25.06.2019'],
            [21091705,  0,'25.06.2019'],
            [21091705,  0,'17.05.2019'],
            [21091705,  641256,'25.06.2019']
            ],
            [
            [21091703,  487000,'30.06.2019'],
            [21091703,  461524,'29.06.2019'],
            [21091703,  0,'29.06.2019'],
            [21091703,  0,'28.06.2019'],
            [21091703,  427701,'28.06.2019'],
            [21091703,  429000,'27.06.2019']
            ],
            [
            [21091701,  421077,'30.06.2019'],
            [21091701,  453777,'29.06.2019'],
            [21091701,  0,'29.06.2019'],
            [21091701,  427701,'28.06.2019'],
            [21091701,  433123,'27.06.2019']
            ],
            [
            [21091704,  491000,'30.06.2019'],
            [21091704,  0,'29.06.2019'],
            [21091704,  474542,'29.06.2019'],
            [21091704,  427701,'28.06.2019'],
            [21091704,  427701,'28.06.2019'],
            [21091704,  0,'27.06.2019']
            ]
            ]

def zero_clear(tablica):

    for i in range(len(tablica)):

        if tablica[i][1] == 0:
            del tablica[i]

    return tablica

for item in tablica:
    zero_clear(item)

5 个答案:

答案 0 :(得分:1)

您在迭代时减小了列表大小,因此遇到了这个问题。尝试下面的代码并检查!

const std::vector<int> myVector = {1, 2, 3};
const std::vector<int> myVector2{1, 2, 3};

答案 1 :(得分:1)

如果在迭代(使用tablica的过程中从for列表元素中删除元素,您将结束为每个删除的元素跳转下一个元素,以解决此问题,您可以使用while循环或创建新列表:

1)使用while循环

def zero_clear(tablica):
    i = 0
    while i < len(tablica):
        if tablica[i][1] == 0:
            del tablica[i]
        else:
            i += 1

for item in tablica:
    zero_clear(item)

2)创建一个新列表

def zero_clear(tablica):

    new_list = []

    for l in tablica:
        if l[1] != 0:
            new_list.append(l)

    return new_list




for item in tablica:
    item[:] = zero_clear(item)

或通过使用列表理解来创建新元素:

for item in tablica:
    item[:] = [l for l in item if l[1] != 0]

或使用列表理解功能创建一个全新的列表:

tablica = [[l for l in item if l[1] != 0] for item in tablica]

输出:

[[[21091705, 653842, '29.06.2019'],
  [21091705, 641701, '28.06.2019'],
  [21091705, 642000, '27.06.2019'],
  [21091705, 642030, '25.06.2019'],
  [21091705, 642030, '25.06.2019'],
  [21091705, 637030, '25.06.2019'],
  [21091705, 641256, '25.06.2019']],
 [[21091703, 487000, '30.06.2019'],
  [21091703, 461524, '29.06.2019'],
  [21091703, 427701, '28.06.2019'],
  [21091703, 429000, '27.06.2019']],
 [[21091701, 421077, '30.06.2019'],
  [21091701, 453777, '29.06.2019'],
  [21091701, 427701, '28.06.2019'],
  [21091701, 433123, '27.06.2019']],
 [[21091704, 491000, '30.06.2019'],
  [21091704, 474542, '29.06.2019'],
  [21091704, 427701, '28.06.2019'],
  [21091704, 427701, '28.06.2019']]]

答案 2 :(得分:0)

您的问题是您在阅读表格时正在删除项目。每次删除项目时,表格都会变短,因此最终会出现list index out of range错误。

您可以改用这种方式:

tablica = [[[row for i in range(len(item))] for row in item if row[1] != 0] for item in tablica]

答案 3 :(得分:0)

这是使用Pods库的解决方案:

         from fyers_api import accessToken
         from fyers_api import fyersModel

               app_id = "xxxxxxxxxx"
               app_secret = "xxxxxxxxxx"
               app_session = accessToken.SessionModel(app_id, app_secret)
               response = app_session.auth()
               print(app_session)
               print(response)
               authorization_code = response['data']['authorization_code']

               app_session.set_token(authorization_code)
               gen_token = app_session.generate_token()
               print("token url is copy paste this url in browser and copy access 
               token excluding your id at Last  ")
               print(gen_token)
               print("tokent printed thanks")




   token="gAAAAABeTWk7AnufuuQQx0D0NkgABinWk7AnufuuQQx0DQ3ctAFWk7AnufuuQQx0DMQQwacJ- 
   _xUVnrTu2Pk5K5QCLF0SZmw7nlpaWk7AnufuuQQx0DG4_3EGCYw92-iAh8="
  is_async = False
  fyers = fyersModel.FyersModel(is_async)
  print(fyers. get_profile(token = token))
  fyers.funds(token = token)
  print(fyers.funds(token = token))

我还没有测试时序,但是通过这种方式,该解决方案可以轻松扩展到大型矩阵。我建议您使用pandas库来管理类似表格的数据,因为它具有许多比纯Python更有效的方法。

答案 4 :(得分:0)

我觉得出了点问题,因为在更改矩阵后,当我使用简单的for循环时,要看到输出,应该是这样的(第二个位置没有列表,且位置为0)

    for ele in tablica:
        for item in ele:
            print(item)

[21091705, 653842, '29.06.2019']
[21091705, 641701, '28.06.2019']
[21091705, 642000, '27.06.2019']
[21091705, 642030, '25.06.2019']
[21091705, 642030, '25.06.2019']
[21091705, 637030, '25.06.2019']
[21091705, 641256, '25.06.2019']
[21091703, 487000, '30.06.2019']
[21091703, 461524, '29.06.2019']
[21091703, 427701, '28.06.2019']
[21091703, 429000, '27.06.2019']
[21091701, 421077, '30.06.2019']
[21091701, 453777, '29.06.2019']
[21091701, 427701, '28.06.2019']
[21091701, 433123, '27.06.2019']
[21091704, 491000, '30.06.2019']
[21091704, 474542, '29.06.2019']
[21091704, 427701, '28.06.2019']
[21091704, 427701, '28.06.2019']

当我使用此循环查看矩阵更改后的输出时,输出要复杂得多:

tablica = [[[row for i in range(len(item))] for row in item if row[1] != 0] for item in tablica]

输出:

for ele in tablica:
      for item in ele:
                print(item)

[[21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019'], [21091705, 653842, '29.06.2019']]
[[21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019'], [21091705, 641701, '28.06.2019']]
[[21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019'], [21091705, 642000, '27.06.2019']]