Python - 使用list()和操作列表

时间:2016-07-31 12:52:50

标签: python list

我的列表生成脚本似乎有问题。我试图将字符串转换为字符串列表列表,以便在特定的函数中使用它。

例如,我想转换字符串 'abc'到a:[['a'],['b'],['c']]。 所以我写的剧本是:

s='some string'
t=[[0]]*len(s)
for i in range(len(s)):
    t[i][0] = list(s)[i]
return t

问题是这会返回[['g'],['g'],..,['g']]而不是[['s'],['o'],..,['g'])

我找到了另一种方法来实现这一点,但我似乎无法找到这个脚本的问题。 所以,如果有人能帮助我,我会非常感激。提前谢谢。

2 个答案:

答案 0 :(得分:5)

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PaginatedList<T> { private static final int DEFAULT_PAGE_SIZE = 10; private List<T> list; private List<List<T>> listOfPages; private int pageSize = DEFAULT_PAGE_SIZE; private int currentPage = 0; public PaginatedList(List<T> list) { this.list = list; initPages(); } public PaginatedList(List<T> list, int pageSize) { this.list = list; this.pageSize = pageSize; initPages(); } public List<T> getPage(int pageNumber) { if (listOfPages == null || pageNumber > listOfPages.size() || pageNumber < 1) { return Collections.emptyList(); } currentPage = pageNumber; List<T> page = listOfPages.get(--pageNumber); return page; } public int numberOfPages() { if (listOfPages == null) { return 0; } return listOfPages.size(); } public List<T> nextPage() { List<T> page = getPage(++currentPage); return page; } public List<T> previousPage() { List<T> page = getPage(--currentPage); return page; } public void initPages() { if (list == null || listOfPages != null) { return; } if (pageSize <= 0 || pageSize > list.size()) { pageSize = list.size(); } int numOfPages = (int) Math.ceil((double) list.size() / (double) pageSize); listOfPages = new ArrayList<List<T>>(numOfPages); for (int pageNum = 0; pageNum < numOfPages;) { int from = pageNum * pageSize; int to = Math.min(++pageNum * pageSize, list.size()); listOfPages.add(list.subList(from, to)); } } public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 1; i <= 62; i++) { list.add(i); } PaginatedList<Integer> paginatedList = new PaginatedList<Integer>(list); while (true) { List<Integer> page = paginatedList.nextPage(); if (page == null || page.isEmpty()) { break; } for (Integer value : page) { System.out.println(value); } System.out.println("------------"); } } } 没有按照您的想法行事,请考虑这种更好的方法:

[[0]] * len(s)

答案 1 :(得分:3)

这是一个经典错误:[[0]]*n创建了对唯一对象n的{​​{1}}引用列表。使用此选项可以创建[0]个不同对象的列表,所有对象都等于n[0]。这样,您就可以在不影响其他值的情况下更改每个值的值。