我用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)
答案 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']]