我的列表生成脚本似乎有问题。我试图将字符串转换为字符串列表列表,以便在特定的函数中使用它。
例如,我想转换字符串
'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'])
。
我找到了另一种方法来实现这一点,但我似乎无法找到这个脚本的问题。 所以,如果有人能帮助我,我会非常感激。提前谢谢。
答案 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]
。这样,您就可以在不影响其他值的情况下更改每个值的值。