列表到元组转换列表

时间:2017-02-18 21:57:12

标签: python list tuples

我是Python的新手。我可以将列表更改为元组,例如

Site.prototype.hamburgerHandler = function() {
  var site = this;
  $('#hamburger').click(function(event) {
    event.stopPropagation();
    if(!site.menuOpen) {
      $('nav ul').attr('class', 'open');
      site.menuOpen = true;
    } else {
      $('nav ul').attr('class', 'closed');
      site.menuOpen = false;
    }
  });
}

我正在尝试创建一个赋予项目及其位置的元组,因此会出现一个元组li = [1] tuple(li) 。我不知道如何开始。

5 个答案:

答案 0 :(得分:1)

如果你想要一个元组元组,你可以使用像这样的生成器表达式;

li = [4, 5, 6]
tuple((li[i], i) for i in range(len(li)))

或使用枚举;

tuple((v, k) for k,v in enumerate(li))

两者都将返回;

((4, 0), (5, 1), (6, 2))

如果你想要一个元组列表,你可以像这样使用列表推导表达式;

[(li[i], i) for i in range(len(li))]

或使用枚举;

[(v,k) for k, v in enumerate(li)]

两者都将返回;

[(4, 0), (5, 1), (6, 2)]

答案 1 :(得分:1)

使用enumerate完全符合您的要求,只需翻转元素和索引:

public function __construct() {
   parent::__construct();
   $this->load->model('user/user_model');
   $this->load->library('form_validation');
}

public function login() {
    $this->form_validation->set_rules('username', 'username', 'trim|required');
    $this->form_validation->set_rules('password', 'password', 'trim|required');

    if ($this->form_validation->run() == FALSE) {

       // login view

    } else {

       $login = $this->user_model->login($this->input->post('username'), $this->input->post('password'));

       if ($login == true) {
           redirect('some-controller');
       } else {
           set a error or reload login view.
       }
    }
}

答案 2 :(得分:0)

如果你只想要一个元组,你可以这样做:

li = (list[1], 1)

这里的括号是元组的文字语法。

如果您想对列表中的所有元素执行此操作,可以使用列表解析:

lis = [(list[i], i) for i in range(len(list))]

哪个会创建一个元组列表,每个元组都有元素及其索引。

答案 3 :(得分:0)

一种可能的方法是使用enumerate

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>Untitled Document</title>
     {% load static %}
     <link rel="stylesheet" type="text/css" href="{% static 'gradebook/style.css' %}" />
     </head>

<body>
    <form action='.' method='POST'>
        {% csrf_token %}
        {{ form }}
    </form>
<table cellpadding="0" cellspacing="0">
    <tr>
        <td>
        {% if assignments %}
            {% for assignment in assignments %}
                <td colspan="2">{{assignment}}</td>
            {% endfor %}
        {% endif %}
        </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        {% if assignments %}
            {% for assignment in assignments %}
                <td>д.р.</td>
                <td>к.р.</td>
            {% endfor %}
        {% endif %}

    </tr>
    {% if students %}
    <form actions='.' method='POST'>
        {% csrf_token %}
        {% for student in students %}
            <tr>
                <td>{{student.name}}</td>

                {% for s in assignment_scores %}
                    {% if s.student.name == student.name %}
                        <td> {{ s.assignment_score }} </td>
                        <td> {{ s.class_assignment_score }} </td>
                    {%endif%}
                {% endfor %}
            </tr>
        {% endfor %}
        <button type="submit" class="save btn btn-default">Save</button>

    </form>

    {% else %}
        <p> No students </p>
    {% endif %}
</table>
</body>
</html>

打印

li = [10, 20, 30]
list(enumerate(li))

如果您希望输出处于(项目,位置)顺序,则可以使用

[(0, 10), (1, 20), (2, 30)]

答案 4 :(得分:0)

带有zip

range是另一种选择:

In [4]: li = [2,4,6]

In [5]: zip(li, range(len(li)))
Out[5]: [(2, 0), (4, 1), (6, 2)]