首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中,根据索引及其后面的项对列表进行切片

在Python中,根据索引及其后面的项对列表进行切片
EN

Stack Overflow用户
提问于 2019-05-14 09:42:52
回答 16查看 3.8K关注 0票数 39

假设我有一系列的学位值,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEGREES = [
    0, 15, 30, 45, 60,
    75, 90, 105, 120,
    135, 150, 165, 180,
    195, 210, 225, 240,
    255, 270, 285, 300,
    315, 330, 345,
]

我会选择一个角度,然后能够平分这个假设的圆圈,以便更容易地找到通往目标方向的最短路线。

这么说,我如何选择一个特定的值,比如90,然后能够找到它背后的前12个元素,包括绕到末尾的索引?

所以,把前面的值应用到这个列表中,我会得到这样的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[90, 75, 60, 45, 30, 15, 0, 345, 330, 315, 300, 285, 270]

使用片表示法,我尝试这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index = DEGREES.index(90)
print(DEGREES[index-12:index]) # start 12 values back, stop at index

但这只会打印一个空数组。

是否有方法对列表进行切片,以便获得我所使用的索引后面的前12个值?

编辑:

原来这是个XY问题,我的错。最初,我试图在Pygame中创建一个平滑的旋转系统,由于我试图计算角度不起作用,我问这个问题是为了解决另一个我试图实现的想法的问题。最后,我接受了帮助我建立平稳旋转系统的答案,但下面有一些关于最初问题的相关答案。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2019-05-14 10:43:02

带角度的算术

您的目标不是分割、连接或反向列表。您的目标是使用学位完成基本算术,并将结果保持在0359之间。为此,您确实应该使用模数运算符%

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 90 % 360
90
>>> 390 % 360
30
>>> -60 % 360
300
>>> 360 % 360
0

回到问题上

如果您只想用常量增量对度使用这种切片,则可以直接生成所需的列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> STEP = 15
>>> list(range(0, 360, STEP))
[0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345]
>>> def previous_degrees(start, n, step=STEP):
...     return [(start - i * step) % 360 for i in range(n + 1)]
... 
>>> previous_degrees(90, 12)
[90, 75, 60, 45, 30, 15, 0, 345, 330, 315, 300, 285, 270]
>>> previous_degrees(90, 12, 30)
[90, 60, 30, 0, 330, 300, 270, 240, 210, 180, 150, 120, 90]
>>> previous_degrees(90, 6, 45)
[90, 45, 0, 315, 270, 225, 180]

你真正的问题

你在评论中写道:

这一系列的度被设计成与一个平滑的旋转系统一起工作,这是我试图在游戏中创建的。通常,我只会找出当前方向和目标方向之间的区别,然后再从那里开始递增,但是由于旋转是在零度上滚动的,所以我必须对值进行硬编码,以确保它总是走最短的路线。

从两个角度,你需要确定你是顺时针还是逆时针旋转。您可以再次使用模以确保旋转将在-180°至179°之间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def shortest_rotation(start_angle, end_angle):
    return (end_angle - start_angle + 180) % 360 - 180

下面是一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> shortest_rotation(0, 90)
90
>>> shortest_rotation(90, 0)
-90
>>> shortest_rotation(90, 90)
0
>>> shortest_rotation(90, 330)
-120
>>> shortest_rotation(0, 180)
-180
>>> shortest_rotation(0, 181)
-179
>>> shortest_rotation(0, 179)
179
>>> shortest_rotation(10, 350)
-20

现在,您可以创建一个角度列表,以最短的方向旋转:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def rotation_steps(start_angle, end_angle, n):
    increment = shortest_rotation(start_angle, end_angle) / n
    return [(start_angle + i * increment) % 360 for i in range(n + 1)]

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> rotation_steps(90, 270, 12)
[90.0, 75.0, 60.0, 45.0, 30.0, 15.0, 0.0, 345.0, 330.0, 315.0, 300.0, 285.0, 270.0]
>>> rotation_steps(10, 350, 2)
[10.0, 0.0, 350.0]

如果end_angle不是整数,则列表使用浮点数以避免丢失increment

票数 40
EN

Stack Overflow用户

发布于 2019-05-14 09:51:45

或者你可以用deque

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from collections import deque
from itertools import islice

dq = deque(reversed((0, 15, 30, 45, 60,
    75, 90, 105, 120,
    135, 150, 165, 180,
    195, 210, 225, 240,
    255, 270, 285, 300,
    315, 330, 345)))

index = dq.index(90)
dq.rotate(-index)
res = list(islice(dq, 13))
# [90, 75, 60, 45, 30, 15, 0, 345, 330, 315, 300, 285, 270]

您可以使用它作为一个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def f(i):
    dq.rotate(-dq.index(i))
    return list(islice(dq, 13))

#  f(90) = [90, 75, 60, 45, 30, 15, 0, 345, 330, 315, 300, 285, 270]
票数 18
EN

Stack Overflow用户

发布于 2019-05-14 09:53:17

像这样的事情可能更直接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index = DEGREES.index(90)
print([DEGREES[i] for i in range(index, index-13, -1)])
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56135864

复制
相关文章
Cocoa编程中视图控制器与视图类详解
iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的。 显示数据的视图: UITextView UILabel UIImageView UIWebView MKMapViews UIScrollView 可选择的视图(以下两个视图类实例都是模态显示的): UIAlertView UIActionSheet  所有控件(控件是将用户触摸转换为回
猿人谷
2018/01/17
5.1K0
Cocoa编程中视图控制器与视图类详解
VCTransitionsLibrary –自定义iOS交互式转场动画的库
本文介绍了一种用于iOS的交互式转场实现方案,通过使用UIKit Dynamics和UIKit Layout实现自定义转场效果。具体实现包括两个部分:一是交互式转场动画的实现,通过CGAffineTransformAnimation结合UIView.animateWithDuration()方法实现;二是交互式转场交互的实现,通过监听UIViewControllerTransitionCoordinator方法实现。该方案适用于界面之间的复杂转场交互场景,可以自定义转场动画和交互逻辑,实现更加顺滑、自然的界面转场效果。
ios122
2018/01/02
1.6K0
从ajax获取参数到控制器Laravel
route Route::get('search', 'ShowstaffController@search'); 接收变量
双面人
2020/02/17
1.2K0
iOS14开发-UIViewController
UIViewController 可以理解为 App 的界面,负责管理 UIView 中显示的内容和用户的交互,主要有以下作用:
YungFan
2021/03/02
2.4K0
iOS TabBarController实例
-(BaseNavigationController*)setTabBarItemWithRootVC:(id)vc Image:(NSString*)imgName SelectedImage:(NSString*)selectedImg { BaseNavigationController *nav = [[BaseNavigationController alloc] init]; [nav.tabBarItem setImage:[[UIImage imageNamed:imgNam
Lee坚武
2019/12/18
5020
玩转iOS转场动画 原
    关于动画在iOS开发中的应用,曾经整理过一系列的博客进行总结。包括简单的UIView层的动画,CALayer层的动画,Autolayout自动布局动画以及CoreAnimation核心动画框架等。本篇博客主要深入讨论视图控制器、导航控制器来进行界面跳转时的专场动画相关内容。之前的动画相关博客列举如下:
珲少
2018/08/15
1.4K0
玩转iOS转场动画
                                                                            原
【IOS开发基础系列】Storyboard专题
        如果你的 app 有大量的窗口,故事板能帮你减少许多用于从一个窗口转到另一个窗口的导航代码。与每个viewcontroller一个单独的 nib 文件不同,你的 app 只需用一个故事板文件(其中可以包含所有的viewcontroller 以及它们之间的关系)即可。
江中散人_Jun
2023/10/16
1.3K0
【IOS开发基础系列】Storyboard专题
(十四)设置导航高亮
如果 <router-link/> 展示的路劲和当前 url 匹配就会自动给当前元素加上 ..router-link-active 这个 class 设置对应的 class 样式就可以了
老怪兽
2023/02/22
8000
(十四)设置导航高亮
iOS页面切换的几种方式
4.UINavigationController实现多层画面跳转,在导航控制器中,载入有层级关系的界面
用户3004328
2018/09/06
2.5K0
iOS结合导航控制器和标签栏控制器
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
全栈程序员站长
2022/07/06
6030
iOS 自定义 ViewController 过渡动画
WWDC 2013 session 218: Custom Transitions Using View Controllers
Alan Zhang
2018/10/19
1.4K0
UINavigationController 导航控制器概念属性方法
概念 UINavigationController 继承于 UIViewController 包含:viewcontrollers、NavigationBar、Toolbar 导航控制器是一个堆栈结构,只是其中管理的对象是controller,通过push与pop进行controller的切换,UINavigationController是将这些控件(UINavigationBar,UINavigationItem和UIToolBar)和UIViewController紧密的结合了起来 总结: Naviga
用户2141756
2018/05/18
2.2K0
iOS 15导航栏设置
使用Xcode 13.0运行项目到iOS 15的手机上,出现导航栏黑色。但是在低版本Xcode 运行到手机就没有问题。
莫空9081
2021/09/03
1.9K0
IOS开发之TabBarItem&NavigationBarItem
  想必大家都用过微信,微信间的页面切换是如何做成的呢?接下来我们用storyboard结合着代码来模拟一下微信的视图控制模式。   "工欲善其事,必先利其器",下面主要是对storyboard来进行我们项目框架的搭建的,必要时,用代码实现我们的页面效果。在IOS开发中常用的多视图间的切换大致有TabBarController, NavigationBarController, 和模态窗口。第一次接触模态的概念是在Web前端的内容中接触的。下面将会结合一个实际的效果来简单的介绍一下TabBar和Naviga
lizelu
2018/01/11
1.4K0
IOS开发之TabBarItem&NavigationBarItem
Suffusion设置主导航菜单
换用Suffusion主题之后,把菜单栏变成导航横到网站上方了,但是过了很久之后发现不知道以前从哪里设置的这些东西,今天偶然又找到,赶紧记录下来,以防忘记。
the5fire
2019/02/28
1.4K0
从原理上搞懂如何设置线程池参数大小?
其实线程池的设置是有方法的,不是凭借简单的估算来决定的。今天我们就来看看究竟有哪些计算方法可以复用,线程池中各个参数之间又存在怎样的关系呢? 本文咱们来慢慢聊。
架构师修炼
2020/07/20
9490
从原理上搞懂如何设置线程池参数大小?
脉冲控制仪设置参数_科迈控制器中文说明书
上述 pdaf_info->vendor_type = SENSOR_VENDOR_xxxx; 流程 SENSOR_VENDOR_xxxx 添加
全栈程序员站长
2022/10/04
6180
导航栏的设置 背景 线
一、设置导航栏底线 简单获取底线 - (UIView *)navLine { if (!_navLine) { UIView *backgroundView = [self.navigationController.navigationBar subviews].firstObject; _navLine = backgroundView.subviews.firstObject; } return _navLine; } 2.单个页面
developerbfl
2018/06/05
1.2K0
Swift| 基础语法(五)
总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。
進无尽
2018/09/12
2K0
Swift| 基础语法(五)
iOS开发UINavigation系列四——导航控制器UINavigationController
        在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便。前几篇博客地址如下:
珲少
2018/08/15
1.8K0
iOS开发UINavigation系列四——导航控制器UINavigationController

相似问题

TabBarController + TableViewController +导航控制器?

22

从TabBarController的导航控制器隐藏BarButton项目

31

在appDelegate.m中设置导航控制器和tabBarController

30

带导航控制器的Tabbarcontroller控制器

20

TabBarController和导航控制器- Swift -登录

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文